同余逆元简单总结
# 同余&逆元
1. 同余
1. 同余的基本概念及性質(zhì)
○1. 自反性:\(a \equiv a(mod\;m)\)
○2. 對(duì)稱性:\(a \equiv b(mod\;m) \rightarrow b \equiv a(mod\;m)\)
○3. 傳遞性:\(a \equiv b(mod\;m),b \equiv c(mod\;m) \rightarrow a \equiv c(mod\;m)\)
○4. 同加性:\(a \equiv b(mod\;m) c \equiv d(mod\;m) \rightarrow a+c \equiv b+d(mod\;m)\)
○5. 同乘性:\(a \equiv b(mod\;m) c \equiv d(mod\;m) \rightarrow ac \equiv bd(mod\;m)\)
○6. 同冪性:\(a \equiv b (mod\;m) \rightarrow a^n \equiv b^n(mod m)\)n是自然數(shù)
○7. 若\(a \equiv b(mod\;m),n|m\) 則 \(a \equiv b(mod\;n)\)
○8. 若\(ac \equiv bc(mod\;m),(c,m)=d\)則\(a \equiv b(mod\;\dfrac{m}ozvdkddzhkzd)\)
○9. 若\((m,n)=1,a \equiv b(mod\;m),a \equiv b(mod\;n) \Leftrightarrow a \equiv b(mod\;mn)\)
2. 求解線性同余方程 \(ax≡c(mod\;b)\)
可轉(zhuǎn)化為求解方程: \(ax+by=c\)
(同余方程和線性方程的關(guān)系很重要,經(jīng)常用到!!)
1.預(yù)處理:
2.第一步: 檢驗(yàn)是否有解
int gcd=Gcd(a,b);if((c%gcd)!=0) return -1;//若c不是gcd(a,b) 的倍數(shù),則無(wú)解//可以轉(zhuǎn)化為直線上的整點(diǎn)來(lái)理解3.第二步:求解同余方程:\(ax≡gcd(a,b)(mod b)\)即\(ax+by=gcd(a,b)\)
擴(kuò)展歐幾里得算法
擴(kuò)歐的證明:
當(dāng)最后 b'==0 時(shí)a'==gcd(a,b) 則此時(shí) \(a'x+b'y=gcd(a,b)*x\)
令\(x=1,y=0\)即得最后的一組解。
考慮從后往前推出\(ax+by=c\)的解:
設(shè)我們前一步求出的解為\(x_1,y_1,此時(shí)a,b的值就表示為a,b,當(dāng)前的解表示為x,y\)
那么因?yàn)?span id="ozvdkddzhkzd" class="math inline">\(gcd(a,b)=gcd(b,a\)%\(b),a\)%\(b=a-(a/b)*b\)有:\[b*x_1+(a-(a/b)*b)y_1=gcd(a,b)\]
則:
\[b*x_1+(a-(a/b)*b)y_1=ax+by\]
整理得:
\[ay_1+b(x_1-(a/b)y_1)=ax+by\]
容易看出:
\[x=y_1,y=x_1-(a/b)y_1\]
即證。
4.第四步:根據(jù)題意得出答案
若要求出最小正整數(shù)解:
while(x<0) x+=b;x%=b;b/=gcd;//mod 要變成 mod/gcd ;(mod 即為 b)x=x*c/gcd;//同余的同乘性質(zhì)while(x<0) x+=b;x%=b;//最小正整數(shù)解若要求出解的個(gè)數(shù)(或所有解)
int tot=gcd(a,b);// 只有g(shù)cd(a,b) 個(gè)解//要求出每個(gè)解,只需對(duì)其不斷加 b/gcd 即可(同時(shí)y-=a/gcd)3.求解單變量模線性方程組(中國(guó)剩余定理)
有如下方程:
\[\begin{cases} x \equiv a_1 (mod\;m_1)\\ x \equiv a_2 (mod\;m_2)\\ x \equiv a_3 (mod\;m_3)\\ \dots\dots \dots\\ x \equiv a_n (mod\;m_n)\\ \end{cases} \]
其中\((m_1\;m_2\;m_3\dots m_n\)兩兩互質(zhì)\()\)
為了方便表示,將x設(shè)為S
(1)設(shè)\(M=\Pi^n_{i=1}m_i\), 設(shè)\(M_i=M/m_i\)
(2)可知對(duì)于每一個(gè)\(i有:(M_i,m_i)=1\)
即:
\(\qquad\qquad\qquad\qquad\qquad M_ix+m_iy=1\)
那么\(x為M_1\)的逆元,用\(t_i\)表示
兩邊同時(shí)擴(kuò)大\(a_i倍\)
\(\qquad\qquad\qquad\qquad\qquad M_ia_it_i+m_ia_iy=a_i\)
而\(y\)的取值與求解無(wú)關(guān),可將\(a_iy\)視為\(y\),則:
\(\qquad\qquad\qquad\qquad\qquad M_ia_it_i+m_iy=a_i\)
那么易知 \(S=M_ia_it_i\)
則原同余方程組通解為:
\[x=a_1t_1M_1+a_2t_2M_2+....+a_nt_nM_n+kM,k∈Z\]
為什么把每一個(gè)加起來(lái)就行了呢?
因?yàn)槊恳粋€(gè)\(M_i\)都含有因子\(m_j(j\ne i)\),對(duì)于其他的同余方程不產(chǎn)生影響。
若要求最小正整數(shù)解,則對(duì)\(M\)取模即可。
代碼如下:
//中國(guó)剩余定理求解單變量模線性同余方程組 int CRT(int a[],int m[],int h) {int ans=0;int M=1;for(int i=1;i<=h;i++) M*=m[i];//求Mfor(int i=1;i<=h;i++) {ll Mi,ti;Mi=M/m[i];//求Miti=Rev(Mi,m[i]);//求Mi的逆元ans+=((a[i]*Mi%M)*ti)%M;//累加答案if(ans>=M) ans-=M;//取模}return ans; }4.擴(kuò)展中國(guó)剩余定理
這同樣是用來(lái)解決單變量模線性方程組的,但是能夠應(yīng)用于模數(shù)不互質(zhì)的情況
其實(shí)這個(gè)和中國(guó)剩余定理沒有什么關(guān)系,CRT是用構(gòu)造法,而EXCRT則基于擴(kuò)展歐基里德算法
做法:
還是如下方程:
\[\begin{cases} x≡a_1 (mod\;m_1)\\ x≡a_2 (mod\;m_2)\\ x≡a_3 (mod\;m_3)\\ \dots\dots \dots\\ x≡a_n (mod\;m_n)\\ \end{cases} \]
其中\(m_1\ m_2\ m_3\ m_4 \dots m_n\)不一定互質(zhì)
我們可以發(fā)現(xiàn)左邊的式子都是相同的,于是有了同余方程合并這種操作
既然是合并,我們只要討論兩個(gè)式子的時(shí)候的情況
對(duì)于:
\[\begin{cases} x \equiv a_1\ (mod\ m_1)\\ x \equiv a_2\ (mod\ m_2)\\ \end{cases} \]
可以看做是兩個(gè)方程:
\[\begin{cases} x =a_1+x_1m_1\\ x =a_2+x_2m_2\\ \end{cases} \]
合并一下得到:\[a_1+x_1m_1=a_2+x_2m_2\]
移項(xiàng):\[x_1m_1=a_2-a_1+x_2m_2\]
假定\(a_2 \geq a_1\),設(shè)為\(c\),再化為同余方程:\[m_1x_1\equiv c\ (mod\ m_2)\]
令\(gcd(m_1,m_2)=d\),該同于方程有解當(dāng)且僅當(dāng)\(d|c\),所以如果\(d\)不整除\(c\)則整個(gè)同余方程組無(wú)解
反之,由同余的性質(zhì)得:\[\frac{m_1}ozvdkddzhkzdx_1\equiv \frac{c}ozvdkddzhkzd\ (mod \frac{m_2}ozvdkddzhkzd)\]
記\(d_1=\dfrac{m_1}ozvdkddzhkzd,d_2=\dfrac{m_2}ozvdkddzhkzd,c_2=\dfrac{c}ozvdkddzhkzd\)
由于此時(shí)\(d_1,d_2\) 一定互質(zhì),所以\(d_1\)在模\(d_2\)的意義下一定有逆元,記為\(d_1^{-1}\),那么可以解出\(x_1\)(其實(shí)就是擴(kuò)歐)
\[x_1=d_1^{-1}c_2+d_2x_2\]
回代進(jìn)一開始的方程:
\[x=c+(d_1^{-1}c_2+d_2x_2)m_1\]
展開化簡(jiǎn)得:
\[x=d_1^{-1}c_2m_1+c+\frac{m_1m_2}ozvdkddzhkzdx_2\]
于是我們可以得到一個(gè)新的同余方程:
\[x\equiv d_1^{-1}c_2m_1+c \ (mod\ \frac{m_1m_2}ozvdkddzhkzd)\]
于是就這樣一直合并下去,最后的解就直接出來(lái)了(注意最后的模數(shù)會(huì)變成\(lcm(m_1,m_2,...,m_n)\))
中間結(jié)果注意防溢出
函數(shù)代碼:
5.盧卡斯定理(大組合數(shù)取模)
對(duì)于組合數(shù)取模,如\[C^m_n\ mod\ p\]
其中p是一個(gè)質(zhì)數(shù),有如下定理:
盧卡斯定理:組合數(shù)\(C^m_n\)在模意義下等價(jià)于把n和m看成一個(gè)p進(jìn)制數(shù),對(duì)每一位分別求出組合數(shù)后乘起來(lái)
比如說(shuō)假設(shè):
\(n=a_1*p^0+a_2*p^1+a_3*p^3+\dots a_k*p^k,m=b_1*p^0+b_2*p^1+b_3*p^3+\dots b_k*p^k\)
那么:\[C^m_n\; mod\; p=\prod_{i=0}^k C^{b_i}_{a_i} \; mod\;p\]
顯然如果p很大的話沒有什么鳥用
但是當(dāng)p不是特別大的話,我們可以發(fā)現(xiàn)通過這個(gè)定理我們要求的組合數(shù)的n,m都不會(huì)超過p,可以使用階乘來(lái)解決,并且這時(shí)階乘一定和p是互質(zhì)的,一定存在逆元,通過階乘逆元我們可以直接算出組合數(shù)
復(fù)雜度是\(O(p\ log_pn)\),預(yù)處理階乘逆元就直接是\(O(p+log_pn)\)了,看上去還是很有用的
主要代碼:
inline ll C(ll n,ll m,ll p){if(m>n) return 0;return fac[n]*fpow(fac[m],p-2,p)%p*fpow(fac[n-m],p-2,p)%p; } ll Lucas(ll n,ll m,ll p) {if(!m) return 1;return C(n%p,m%p,p)*Lucas(n/p,m/p,p)%p; }6.擴(kuò)展盧卡斯定理
還是這個(gè)東西:\[C^m_n\ mod\ p\]
但是p不一定是質(zhì)數(shù)
這個(gè)其實(shí)和盧卡斯定理也沒有什么很大的關(guān)系
我們先把p給質(zhì)因數(shù)分解:\[p=p_1^{k_1}p_2^{k_2}p_3^{k_3}\dots p_n^{k_n}\]
可以看出,如果所有的k都是1的話,我們?cè)O(shè)\(C_n^m=x\),對(duì)每一個(gè)\(p_i\)分別用盧卡斯定理求出組合數(shù)\(C_i\),那么就變成了求解一系列的同余方程組:
\[\begin{cases} x \equiv C_1 \ mod\ p_1 \\ x \equiv C_2 \ mod\ p_2 \\ x \equiv C_3 \ mod\ p_3 \\ x \equiv C_4 \ mod\ p_4 \\ x \equiv C_5 \ mod\ p_5 \\ \end{cases} \]
于是我們可以用中國(guó)剩余定理進(jìn)行合并,求出最后的x,顯然在模p意義下最后只會(huì)有唯一解
問題在于我們現(xiàn)在的p可能不是一次,而是有k次,要想用CRT來(lái)進(jìn)行合并只能靠求出\(C_n^m\ mod\ p_i^{k_i}\)
因?yàn)橐淹嗍?span id="ozvdkddzhkzd" class="math inline">\(x\equiv a\ (mod\ p_1p_2)\)拆開必須要滿足\(p_1\)和\(p_2\)互質(zhì),顯然兩個(gè)相同的數(shù)不會(huì)互質(zhì)
于是問題轉(zhuǎn)化為快速求出\(C_n^m\ mod\ p_i^{k_i}\)
為方便,我們?cè)O(shè)現(xiàn)在考慮的模數(shù)是\(p^k\),\(p\)是一個(gè)質(zhì)數(shù)
還是考慮用階乘來(lái)解決:\[C^m_n=\dfrac{n!}{m!(n-m)!}\]
我們仔細(xì)觀察可以發(fā)現(xiàn)\(n!\)中含有的\(p\)這個(gè)因子的個(gè)數(shù)一定會(huì)不少于\(m!(n-m)!\)中p的個(gè)數(shù),我們可以很容易得到一個(gè)階乘中含有的p的個(gè)數(shù)的遞推公式:\[f(n)=f(\lfloor { \frac{n}{p} }\rfloor)*\lfloor { \frac{n}{p} }\rfloor\]
例如我們要求:\(9!\)中\(2\)的個(gè)數(shù):
\[9!=1\times2\times3\times4\times5\times6\times7\times8\times9 \\ =1\times3\times5\times7\times9\times[2\times(1\times2\times3\times4)] \]
這就比較直觀了,有了這個(gè)的話,我們假設(shè)求出階乘中不含\(p\)的項(xiàng)的積,這樣就可以通過逆元來(lái)進(jìn)行組合數(shù)計(jì)算了,只需要最后把因該有的\(p\)給再乘上去就行了
于是問題再次變?yōu)槿绾慰焖偾蟪鲭A乘
其實(shí)方法在上面\(9!\)的變換中就可以發(fā)現(xiàn)了,由于我們不管\(p\)有多少,發(fā)現(xiàn)提出來(lái)一個(gè)\(p\)之后,右邊那部分的階乘可以遞歸進(jìn)行計(jì)算,就是\(\lfloor { \frac{n}{p} }\rfloor!\),于是關(guān)鍵在于計(jì)算左邊
由于是模p意義下,在上面的式子中,可以發(fā)現(xiàn)左邊其實(shí)全部都是1,手玩一下其他的發(fā)現(xiàn)顯然這個(gè)東西是以p個(gè)一循環(huán)的,并且可能會(huì)剩下不超過p個(gè)數(shù)
所以循環(huán)部分算出一個(gè)然后快速冪\(n/p\)次,最后還會(huì)剩下\(n\%p\)個(gè),直接暴力算這些
所以對(duì)于一次的階乘要算的次數(shù)也不會(huì)超過\(O(p)\)次,總共有\(log_pn\)層
所以計(jì)算一個(gè)階乘的復(fù)雜度為\(O(p\ log_pn)\)
總復(fù)雜度也就是把所有模數(shù)的復(fù)雜度加起來(lái),最高也不超過最大質(zhì)因子的復(fù)雜度
所以我們就解決了這個(gè)問題
剩下的就是算出逆元,求出組合數(shù),處理多余的質(zhì)因子p,然后CRT合并
代碼:
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll n,m;int p; inline void exgcd(int a,int b,int&x,int &y){if(!b) {x=1;y=0;return;}exgcd(b,a%b,x,y);int tmp=x;x=y;y=tmp-a/b*y;return; } template<class T>inline int fpow(int x,T k,int mod){int ret=1;for(;k;k>>=1,x=(ll)x*x%mod) if(k&1) ret=(ll)ret*x%mod;return ret;} template<class T>inline void Inc(T&x,int y,int mod){x+=y;if(x>=mod) x-=mod;return;} inline int Fac(ll n,int pi,int pk){if(n<=1) return 1;int ret=1,rsub=Fac(n/pi,pi,pk),res=n%pk;if(n>=pk) {for(int i=2;i<=pk;++i) if(i%pi) ret=(ll)ret*i%pk;ret=fpow(ret,n/pk,pk)%pk;} // 統(tǒng)計(jì)長(zhǎng)度為模數(shù)且不含該模數(shù)質(zhì)因子的階乘for(int i=2;i<=res;++i) if(i%pi) ret=(ll)ret*i%pk;//模意義下,直接枚舉模了之后的未統(tǒng)計(jì)數(shù)也可以return (ll)ret*rsub%pk; } inline int Inv(int a,int b) {int x,y;exgcd(a,b,x,y);x=(x+b)%b;return x;} inline ll Count(ll n,int d){return n<d? 0:(Count(n/d,d)+n/d);} inline int C(ll n,ll m,int pi,int pk) {if(m>n) return 0;int facn=Fac(n,pi,pk),facm=Fac(m,pi,pk),facmn=Fac(n-m,pi,pk);//求解三個(gè)階乘ll num=Count(n,pi)-Count(m,pi)-Count(n-m,pi);//把p這個(gè)質(zhì)因子都提出來(lái)單獨(dú)算(其實(shí)算階乘的時(shí)候沒有處理這些數(shù))return (ll)facn*Inv(facm,pk)%pk*Inv(facmn,pk)%pk*fpow(pi,num,pk)%pk; } inline int EXLucas(ll n,ll m,int p){if(n<m) return 0;if(n==m||!m) return 1;int ans=0;int x=p;for(int i=2;i<=p;++i)if(!(x%i)){int pk=1;while(!(x%i)) pk*=i,x/=i;int res=C(n,m,i,pk);Inc(ans,(ll)res*(p/pk)%p*Inv(p/pk,pk)%p,p);}return ans; } int main(){scanf("%lld %lld %d",&n,&m,&p);printf("%d\n",EXLucas(n,m,p));}Upd: 稍微改了一下上面的模板 , 下面的模板是預(yù)處理階乘后的 , 這樣 \(p\) 這部分的復(fù)雜度就不用帶 \(log\) 了。
int FC[4][N],Pr[4]={0,3,11,100003},mo[4]={0,81,121,100003};//這里用于預(yù)處理到模數(shù)(不含其質(zhì)因子)的階乘,存放質(zhì)因子和分解后模數(shù) inline int gcd(int a,int b){return b? gcd(b,a%b):a;} inline int Count(int n,int d){return n<d? 0:(n/d+Count(n/d,d));}//計(jì)算階乘中的該因子個(gè)數(shù) inline void Exgcd(int a,int b,int &x,int &y){if(!b) {x=1;y=0;return;}Exgcd(b,a%b,x,y);int tmp=x;x=y;y=tmp-a/b*y;return; } inline int Inv(int a,int mod){a%=mod;int x,y;Exgcd(a,mod,x,y);return (x+mod)%mod;} inline int Fac(int n,int id){//階乘return n<=Pr[id]? FC[id][n]:((ll)fpow(FC[id][mo[id]],n/mo[id],mo[id])*FC[id][n%mo[id]]%mo[id]*Fac(n/Pr[id],id))%mo[id]; } inline int Comb(int n,int m,int id){//組合數(shù)int facn=Fac(n,id),facm=Fac(m,id),facnm=Fac(n-m,id);int Pop=fpow(Pr[id],Count(n,Pr[id])-Count(m,Pr[id])-Count(n-m,Pr[id]),mo[id]);if(!Pop) return 0;return (ll)facn*Inv(facm,mo[id])%mo[id]*Inv(facnm,mo[id])%mo[id]*Pop%mo[id]; } inline int ExLucas(int n,int m){if(n<m) return 0;if(!n&&!m) return 1;int ret=0;for(int i=1;i<=3;++i) {int C=Comb(n,m,i);Inc(ret,(ll)C*Inv(mod/mo[i],mo[i])%mod*(mod/mo[i])%mod);}return ret%mod; }//壓行真的好看多了7.二次剩余
求解 \(x\) 使得:
\[x^2\equiv n \ (mod\ p)\]
\(p\) 如果是 \(2\) 那么 \(x=n\) 一定是 \(n\)的一個(gè)二次剩余 , 所以這里討論的 \(p\)都是奇質(zhì)數(shù)。
首先二次剩余并不一定存在 , 其存在的充要條件是: \(n^{\frac{p-1}{2}} \equiv 1\ (mod\ p)\)
證明(以下運(yùn)算均在模意義下):
首先我們有 \(x^{p-1}=1\)
把要求的東西左右各 \(\frac{p-1}{2}\) 次方那么就是 \(n^{\frac{p-1}{2}}=x^{p-1}=1,\)證畢。
求解方法:
法1:
我們可以利用質(zhì)數(shù) \(p\) 的原根 \(g\) 來(lái)解決這個(gè)問題
我們找到一個(gè) \(d\) 使得,\(g^d=n\),因?yàn)?\(g\) 是 \(p\) 的原根那么一定是有解的,可以使用 \(BSGS\) 求解。
那么問題變成 \(x^2=g^d\) , 可以證明 \(d\) 一定是一個(gè)偶數(shù) ,所以 \(x=g^{\fracozvdkddzhkzd{2}}\) ,就做完了。
復(fù)雜度為 \(O(\sqrt p)\) ,因?yàn)橐褂?\(BSGS\) 算法求解離散對(duì)數(shù)。
法2:
這就是一種很數(shù)學(xué)的方法了。
我們隨機(jī)一個(gè)數(shù) \(a\) 滿足 \(a^2-n\) 沒有二次剩余,這樣的期望次數(shù)為 2 。
然后令 \(\delta=\sqrt{a^2-n}\),定義一個(gè)新的數(shù)域,所有數(shù)可以表示為 \(a+b\delta\)
結(jié)論是 \((a+\delta)^{\frac{p+1}{2}}\) 就是 \(n\) 的二次剩余。
證明:
因?yàn)?\(a^2-n\) 沒有二次剩余,所以 \((a^2-n)^{\frac{p-1}{2}}\neq 1\)
由費(fèi)馬小定理得到 \((a^2-n)^{p-1}=1\) , 那么由代數(shù)基本定理這個(gè)形如 \(x^2=1\) 的方程只有 \(+1,-1\) 兩個(gè)根,所以 \((a^2-n)^{\frac{p-1}{2}}=-1\)
也就是 \(\delta^{p-1}=-1\)
然后考慮 \((a+\delta)^{p}\)
\[(a+\delta)^p=\sum_{i=0}^p a^i\delta^{p-i}{p\choose i}\]
因?yàn)?\(p\) 是一個(gè)奇質(zhì)數(shù),所以組合數(shù)在\(\mod p\) 意義下時(shí)當(dāng)且僅當(dāng) \(i=0\) 或 \(i=p\) 時(shí)才不為0
所以:\((a+\delta)^p=a^p+\delta^p\)
因?yàn)?\(a^p=a,\delta^p=-\delta\)
\((a+\delta)^p=a-\delta\)
\((a+\delta)^{p+1}=a-\delta\)
代碼:
inline int Get_sqrt(int n){//二次剩余if(n<=1) return n;if((int)sqrt(n)*(int)sqrt(n)==n) return (int)sqrt(n);srand(time(NULL));int a,delta,D=(mod-1)>>1;while(233) {a=rand()%mod;delta=Dif((ll)a*a%mod,n);if(fpow(delta,D)!=1) break;}D=(mod+1)>>1;int b=1;int c=1,d=0;while(D){if(D&1) {int _c=c;c=((ll)a*c+(ll)b*d%mod*delta)%mod,d=((ll)a*d+(ll)b*_c)%mod;}int _a=a;a=((ll)a*a+(ll)b*b%mod*delta)%mod;b=(2ll*b*_a)%mod;D>>=1;}c=min(c,mod-c);return c; }2.逆元
1.定義:在 mod m 的意義下,設(shè)b是a的逆元,則:\(a*b≡1 (mod\;m)\)
2.求解方法:
1.線性遞推法
逆元的遞推公式:\[inv[i]=(P-P/i)*inv[P\%i]\%P\]
階乘逆元的遞推公式:\[inv[i]=inv[i+1]*(i+1)\%P\]
上面的\(inv[i]\)表示 \(i!\) 的逆元
2.擴(kuò)展歐基里德法:
在上面我們用擴(kuò)歐求了如下同余方程的解:\[ax \equiv b\ (mod\ p)\]
而逆元是求的這個(gè)同余方程:\[ax \equiv 1\ (mod\ p)\]
所以把b直接設(shè)為1然后擴(kuò)歐解出x的最小正整數(shù)解就是a的逆元了
可以發(fā)現(xiàn)a,p一定要互質(zhì),不然同余方程無(wú)解,即a在a和p不互質(zhì)的情況下是沒有逆元的
3.費(fèi)馬小定理
費(fèi)馬小定理:
當(dāng)a和p互質(zhì)且p是質(zhì)數(shù)時(shí),有
\[a^{p-1} \equiv 1 \ (mod\ p)\]
相當(dāng)于是:\[a^{p-2}*a \equiv 1\ (mod\ p)\]
所以\(a^{p-2}\)就是a的逆元了
4.歐拉定理
歐拉定理:
當(dāng)a和p互質(zhì)時(shí),有
\[a^{\varphi(p)} \equiv 1\ (mod\ p)\]
所以\(a\)的逆元是\(a^{\varphi(p)-1}\),其實(shí)費(fèi)馬小定理是歐拉定理在p是質(zhì)數(shù)時(shí)的一個(gè)特殊情況
補(bǔ)充:
擴(kuò)展歐拉定理:
\[ a^b \equiv\begin{cases} a^{b \%\varphi(p)+\varphi(p)}\ (mod\ p) & ,b> \varphi(p)\\ a^b & ,b\leq \varphi(p)\\ \end{cases} \]
證明不會(huì)
小結(jié):逆元在a和p互質(zhì)的情況下才有
轉(zhuǎn)載于:https://www.cnblogs.com/NeosKnight/p/10391254.html
總結(jié)
- 上一篇: linux db2 ssl,IBM DB
- 下一篇: 白盒测试方法和黑盒测试方法