【初等數論】逆元
阿新 • • 發佈:2018-11-19
逆元定義先擺上來
對於正整數a和m,如果a*x≡1(mod m),那麼把這個同餘方程中x的最小正整數解叫做a模m的逆元。
求解方法:
1.擴充套件歐幾里得
利用歐幾里得求x
先將方程轉化為
ax-my=1
此時求解x和y
最後利用返回的gcd(a,m)==1
如果成立,則x為逆元存在,否則不存在
注意最後的x要取一下模(x+m)%m
void extgcd(long long a,long long b,long long& x,long long& y){ if(!b){ x=1; y=0;returna;} else{ int t=extgcd(b,a%b,y,x); y-=x*(a/b);return t;} } long long inverse(long long a,long long b) { long long x,y; return extgcd(a,b,x,y)==1?(x+b)%b:-1; }
2.費馬小定理
p為素數
則
a(p-1)=1(mod p)
即a*a(p-2)=1(mod p)
也就是說,a(p-2)為a的逆元
這裡要用到快速冪模運算求a(p-2)
一般來說在模意義下,進行快速冪模運算
當模p不是素數的時候需要用到尤拉定理