數論——逆元
阿新 • • 發佈:2018-02-03
枚舉 spa bsp style 復雜 算法 數論 百度 正整數
逆元定義:對於正整數a,如果有a*x=1(mod m),那麽把這個同余方程中的最小正整數解x叫做a模m的逆元。(同余方程不了解的話可以先自行百度)
(即a*x%m==1)
那麽逆元有什麽用?
通常情況下我們會碰到形如(A/B)%m的情況,顯然(A/B)%m!=(A%m)/(B%m)。然而如果(A*B)%m=(A%m)*(B%m)。
如果我們將1/B轉化為A*X的形式。那麽X就是我們所要求的B在模m下的逆元!
下面講四種求逆元的方法:
1:暴力求解
給定模m和需要求逆的數x,直接暴力枚舉1~m-1
檢查是否有x*i=1(mod m),這種算法可以應用與寫暴力、對拍、模數較小,求逆次數少的情況
時間復雜度O(m)
2:費馬小定理:
限制條件:1、gcd(a,m)==1,即a,m互質。
2、m為質數。
步驟:即,所以是a在模m下的逆元,用快速冪就可以得出結果。
附上一篇費馬小定理分析的通俗易懂的博客https://www.cnblogs.com/linyujun/p/5194184.html
3:擴展歐幾裏得求逆元:(不會擴展歐幾裏得戳這裏:http://www.cnblogs.com/ISGuXing/p/8379483.html)
使用條件:a,b互質。
由exgcd可知a*x+b*y=gcd(a,b),因為a,b互質,所以gcd(a,b)=1。故有a*x+b*y=1。故a*x=1(mod b)。
4:歐拉定理求逆元:(歐拉定理求逆元具有普適性,沒有a,b互質的限制)
有點費馬小定理的樣子,後面的處理和費馬小定理一樣用快速冪。
數論——逆元