問題的完整的上下文可以在這裏 Details看到。ACM 4744蠻力算法
你也可以試試我的源代碼繪製遞歸小數字: Pastebin
我看這個問題的數學方法,它的一個嵌套的遞歸和看起來像如下:
Function Find(integer n, function func)
If n=1
For i = 1 to a do func()
Elseif n=2
For i = 1 to b do func()
Else Find(n-1,Find(n-2,func))
Function Main
Find(n,funny)
我Mathematica中實現無模操作是:
$IterationLimit = Infinity
Clear[A]
A [a_, b_, f_, 1] := A [a, b, f, 1, p] = (f a);
A [a_, b_, f_, 2] := A [a, b, f, 2, p] = (f b);
A [a_, b_, f_, n_] :=
A [a, b, f, n, p] = (A[a, b, A[a, b, f, n - 2], n - 1]);
這揭示了一些很不錯的輸出FO [R一般一個和b
A[a, b, funny, 1]
a funny
A[a, b, funny, 2]
b funny
A[a, b, funny, 3]
a b funny
A[a, b, funny, 4]
a b^2 funny
A[a, b, funny, 5]
a^2 b^3 funny
A[a, b, funny, 6]
a^3 b^5 funny
所以,當我們在看func被頻繁程度,這似乎是一個^(F(N))* B ^(F(N + 1) ) 與F(n)作爲第n個斐波納契數。所以我的問題是:我如何獲得非常巨大的斐波那契數,數模p,我做了很多的這個研究,通讀週期Lenghts斐波那契的,嘗試了一些遞歸有:
F(A + B)= F(a + 1)* F(b)+ F(a)* F(b-1)
但似乎像遞歸深度(log_2(1.000.000.000)〜= 30)即使進行了深度的第一次遞歸,兩個數字也是非常重要的。
a= floor(n/2)
b= ceiling(n/2)
時,我有一個Fib號碼,乘法和乘方 不應該在我的角度來看問題。
遺憾的是沒有:/
我還是堅持了問題。計算在指數的斐波那契數號碼第一次沒解決的問題是正確的,這是一個錯誤遵從數學我申請有:/
所以我想其他的方法計算公式:
(a^(Fibonacci(n-2))*b^(Fibonacci(n-1))) mod p
但隨着斐波那契數字變得非常大,我假設必須比計算整個斐波納契數然後將離散指數函數應用於BigInteger/BigFloat更簡單。有人對我有暗示,我看不到進一步的進展。由於
因此,這是我到目前爲止我,可能只是我缺少一點東西,所以期待您的答覆
感謝
是的,這是我的想法之一,Mathematica沒有解決它的問題,但在Java中,我認爲沒有可能將此數字存儲爲,比方說,加倍。而且我不知道Mathematica如何快速計算這些數字。對於大數字,甚至有一個泛化,因爲最後一項限制爲零。謝謝 –