冪的一個公式(二)
斐波那契數列定義如下:
- Fn = Fn-1 + Fn-2, F1 = F2 = 1
令 ,可以使用以下 Haskell 程式來計算 g(105):
import Math.NumberTheory.Powers ( powerMod )
m = 9; m1 = 10^m; m2 = 4*5^(m-1)
p2 n = powerMod 2 n m1
fibs = map fst $ iterate (\(a,b)->(b,a+b)) (1,1) :: [Integer]
main = print $ mod (sum $ map p2 $ take (10^5) fibs) m1
這個程式的執行時間是 6 分 59 秒。
如果把上述 Haskell 程式中的 p2 函式替換為:
p2 n = powerMod 2 (if n < m2 then n else mod (n-m) m2 + m) m1
這個程式的執行時間是 1.47 秒。
如果 p2 函式替換為:
p2 n = powerMod 2 (mod n m1) m1
這個程式的執行時間是 1.39 秒,它在 99.999999% 的情況下能夠給出正確答案。
以下 3 個公式,前 2 個是正確的,第 3 個不正確。
- (a ± b) mod m = (a mod m ± b mod m) mod m
- ab mod m = (a mod m) (b mod m) mod m
- 2n mod m = 2 n mod m mod m
如果 m = 109,第 3 個公式出錯的概率小於一億分之一。
以下 C 語言程式的執行時間是 0.014 秒:
#include <stdio.h>
int powerMod(int a, int b, int m)
{
long v = 1;
for (; b; b >>= 1, a = (long)a * a % m) if (b & 1) v = v * a % m;
return (int)v;
}
int main(void)
{
int m = 9, m1 = (int)1e9, m2 = 1562500, n = (int)1e6, z = 0;
for (int i = 0, f1 = 1, f2 = 1, f3; i < n; i++, f1 = f2, f2 = f3) {
f3 = (f1 + f2) % m2;
if (i > 5 && f1 < m) f1 += m2;
z = (powerMod(2, f1, m1) + z) % m1;
}
printf("%d\n", z);
}
如果刪除 main 函式 for 迴圈中的 if 語句,這個程式也幾乎是正確的。
- g(101) = 200938800
- g(102) = 075829040
- g(103) = 195598640
- g(104) = 273294640
- g(105) = 050254640
- g(106) = 819854640
- g(107) = 515854640
- g(108) = 475854640
- g(109) = 075854640
我們有以下猜想:
- 猜想1:當 n ≥ 1 時,g(10n) 是 10 的倍數。
- 猜想2:當 n ≥ 9 時,g(10n) = 75854640。
經計算,得到:g(1011) = g(1010) = g(109)。
數列 Fn mod 4 是迴圈數列,其最小正週期是 6:
- 1, 1, 2, 3, 1, 0, ...
數列 g(n) mod 10 是迴圈數列,其最小正週期是 30:
- 2,4,8,6,8,4,6,8,2,0,2,8,0,2,6,4,6,2,4,6,0,8,0,6,8,0,4,2,4,0, ...
所以猜想1是正確的。
猜想2應該也可以用類似的方法證明。
參考資料
相關文章
- 冪的一個公式(一)公式
- 一個公式公式
- HDU 4686 (推公式+矩陣快速冪)公式矩陣
- 一個求和公式的計算公式
- FZU1759Super A^B mod C(快速冪取模) 公式公式
- 供應鏈管理的一個指標和幾個公式指標公式
- 尤拉公式——真正的宇宙第一公式公式
- 一個數number的n次冪 python的pow函式Python函式
- 寫一個通用的冪等元件,我覺得很有必要元件
- HDU 3221Brute-force Algorithm(降冪公式 神似hdu4549)Go公式
- oracle plsql(二)_plsql塊內之**冪OracleSQL
- 二項式展開公式公式
- 三個求和公式公式
- 別人家的面試題:一個整數是否是“4”的N次冪面試題
- (掌握公式)進一退二法倍投法詳解κ公式
- 聊聊如何實現一個帶冪等模板的Kafka消費者Kafka
- 調和葉狀結構--一個有趣的公式(觀點)公式
- 有趣的數學公式(一)公式
- 二項式定理公式推導公式
- 第二章 :查詢與排序-------2.20實戰_快速設計一個高效的求n次冪的演算法排序演算法
- 2的冪
- 找到一個數最接近的比它大的2的n次冪的程式碼分析
- 騰訊二面:如何保證介面冪等性?高併發下的介面冪等性如何實現?
- 機率的一些公式公式
- C語言公式法求一元二次方差的根C語言公式
- HDU 2685 I won't tell you this is about number theory (數論 公式 快速冪取模)公式
- 推公式+二分--poj1759公式
- 常用的10個 Excel 萬能公式套路Excel公式
- 幾個引數配置的計算公式公式
- 冪的計算
- 二進位制運算加減乘除+快速冪
- 4次等冪和最少項至今還未解決的一個問題
- 『等冪和唯一解定理(低1次冪陣列解碼篇)』陣列
- 利用匯編語言指令求一個2的非負整數次冪的次數
- 能用一個公式來計算使用者體驗嗎?公式
- 建立訂單實現冪等的一點思考
- matchTemplate函式各個方法的計算公式函式公式
- 15個常用excel函式公式 excel函式辦公常用公式Excel函式公式