乘法逆元的一些求法
阿新 • • 發佈:2018-12-18
逆元
廣義的來講,對於任何域中的元素,有乘法運算和單位元,如果對於該域中的元素,存在另一個元素,且滿足,那麼就是的逆元。
這裡我們只討論在整數域裡的逆元,也就是當且,其實這裡的逆元,但是我們要在模的意義下討論它的求法。
在取模意義下,我們只需求出一個數,是的這個數於同餘即可,那麼這個數就是在取模意義下的逆元。
費馬小定理
內容:對於,在模的意義下,有
我們變換一個形式,左右同時除以,就是,那麼我們就發現和是同餘的,那麼就是的逆元了。
費馬小定理證明:
- 用尤拉定理直接證明,這個就後面再說。
- 我們用剩餘系來看:
引理1:假設為內的一個數,那麼可以在模的意義下不重複的取遍的值。引理1的證明-這裡面有
那麼我們將乘起來,在模的意義下也就相當於把乘起來,那麼可以得到,然後兩端同時除以就可以得到了,於是得證。
所以用費馬小定理求取逆元的程式碼如下:
int inv(int a,int b=p-2){
int ans=1;
for(;b;b>>=1,a=(a*a)%p)if(b&1)ans=(ans*a)%p;
return ans%p;
}
尤拉定理
內容:對於,在模(為任意與互質的數)意義下,有,其中為尤拉函式,表示中與互質的個數。
那麼我們知道,當為質數時就有,那麼這個就是費馬小定理了。
我們同樣進行變形,可以得到,那麼這裡就為的逆元了。
我們看,這裡只要求互質,並沒有要求為質數,所以尤拉定理求逆元比費馬小定理求逆元應用更加廣泛。
其他應用:當快速冪取模時,指數較大,但我們發現,所以我們可以將指數模了,相當於除以很多個,然後再來快速冪。
尤拉定理的證明:
我們先令為的簡化剩餘系,再令,其中
引理1. 之間兩兩在模的意義下不同餘,同樣也是。
- 證明引理1. :
假設有,那麼,我們將其變形得,也就是,由於,所以只有在為的倍數時,這個式子才滿足,而,那麼它們相減就更加不可能為的倍數了,所以假設不成立,得證。
引理2. 每個模的結果都與互質。
- 證明引理2. :
假設 那麼變形就有,也就是,我們可以得知肯定與互質(因為分別與互質),那麼我們令,那麼變形可知,也就是