簡體   English   中英

不合理基數的指數算法

[英]Algorithm on exponential with irrational base

我知道在計算a^n有一種O(logn)算法,其中a是一個整數, n是一個巨大的整數(可能是需要對另一個素數MOD進行模塊化的結果)。

我想知道是否還有O(logn)算法可以計算

(a+sqrt(b))^n + (a-sqrt(b))^n (mod MOD)

非指數部分sqrt(b)在指數計算中看起來不容易處理。 我所能做的就是分別計算a+sqrt(b)a-sqrt(b)部分,並將它們加在一起,然后進行模塊化,但是如果n很大,則很容易溢出。 有任何想法嗎?

您可以通過計算(以Z M [x] /⟨x²-b⟩)來實現

(a+x)^n+(a-x)^n mod (M, x^2-b)

在這里,您可以再次對冪使用模數減半運算,現在的中間結果是線性多項式(在模整數上)。 實際上,您只需要一種冪,結果是常數系數的兩倍。


或者,這些冪組合是2階線性遞歸的解

u[n+2]-2*a*u[n+1]+(a^2-b)*u[n]

哪里

u[0]=2 and u[1]=2*a

因此您可以使用此遞歸的系統矩陣的快速矩陣求冪,再次獲得O(log(n))算法(不考慮位大小)。


示例:根據注釋,取a = 3,b = 8,n = 2(並且整數mod M = 10 ^ 9 + 7,示例不足以解決問題)

在第一個變體中,計算u [n] =(a + x)^ n mod(M,x ^ 2-b),因此

u[0]=1
u[1]=3+x
u[2]=(3+x)^2 mod (x^2-8)=9+6x+8=17+6x

常數項的兩倍是2 * 17 = 34

在第二個變體中,遞歸為(2 * a = 6,a ^ 2-b = 1)

u[n+2]-6*u[n+1]+u[n]=0

這樣第一個序列元素是

u[0]=2
u[1]=6
u[2]=6*u[1]-u[0]=34

如果展開(a+sqrt(b))^n + (a-sqrt(b))^n

  ( a + nC1 a^(n-1) √b + nC2 a^(n-2) b + nC3 a^(n-3) √b b + ... )
 +( a - nC1 a^(n-1) √b + nC2 a^(n-2) b - nC3 a^(n-3) √b b + ... )
= 2 a  +  0            + 2 nC2 a^(n-2) b  + 0 + ... + 2 nC4 a^(n-4) b^2 + ...

因此涉及可能不合理的部分的條款將取消。 (nC2等是二項式系數)。

上面的RHS可以使用整數算術相當有效地計算,因為您可以將序列中的每個術語與上一個相關。 但是,有n / 2個項,因此計算為O(n)。

我們知道結果將是一個整數,我們可以嘗試通過平方算法遍歷運算,並跟蹤整數和小數部分。 a+sqrt(b) = x + y ,其中x是整數,y是小數部分。

找到這個平方,我們得到x^2 + 2 xy + y^2 即使我們只對整數部分感興趣,但由於2 x y+ y^2的整數部分,我們仍然會遇到一些問題。 這會導致問題,無法有效地計算我們將要知道的很多y整數部分。 當我們使用更高的冪時,您需要更多更多的y才能得到整數部分。

我認為正常的浮點乘法不足以計算非常大的n

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM