前幾天在看 lucas 定理的時候發現要求 1,2
,⋯,p
−1modp
1, 2,⋯,p−1modp
的逆元,然後就看到了乙個 θ(n
) θ(n)
的做法發現太神了,雖然想起來是挺簡單的
這個做法實際上是這樣的,首先 1−1
≡1(modp)
1−1≡1(modp)
然後我們設 p=k
⋅i+r
,r1<
i<
p p=k⋅i+r, r
再將這個式子放到
modp
modp
意義下就會得到k⋅
i+r≡
0(modp
) k⋅i+r≡0(modp)
兩邊同時乘上 i−1
⋅r−1
i−1⋅r−1
就會得到k⋅
r−1+
i−1i
−1i−
1≡≡≡
0−k⋅
r−1−
⌊pi⌋
⋅(pmodi)
−1(modp)
(modp)
(modp)
k⋅r−1+i−1≡0(modp)i−1≡−k⋅r−1(modp)i−1≡−⌊pi⌋⋅(pmodi)−1(modp)
於是就可以從前面推出當前的逆元了,**也就一行 1
a[i]=
-(p/
i)*a
[p%i
];
數論 逆元 O(n)求逆元
傳送門 這是乙個學長的部落格,但是看了好幾遍都沒記住,所以決定自己寫一下。所謂o n 求逆元就是遞推,下面是證明 inv i mod mod i inv mod i 證明 設 t mod i,k mod i 則 t i k 0 mod mod 移項得到 t i k mod mod 兩邊同除i k,即...
Lucas定理 線性求所有逆元的方法
主要繞過費馬小定理來證明lucas定理,挺有意思.此外設定多進製計算機可以通過移位運算直接加快多進製運算的速度。1.lucas定理 lucas定理解決的問題是組合數取模。數學上來說,就是求 n m modp 這裡n,m 可能很大,比如達到 1015,而p 在109以內。顯然運用常規的階乘方法無法直接...
數論(求逆元)
在密碼學中我們經常需要用到逆元,尤其在rsa公鑰密碼體制中。下面簡介一下求逆元的通用方法,廣義歐幾里得除法的逆運算。如果a,m互素的話,那麼根據歐幾里得除法,最終會得到餘數為1,此時我們可以消去中間變數,最終得到sa tm a,m 1,兩邊同時除以m可以得到sa 1 mod m 顯而易見可以得到s是...