模为2的逆元是什么_两种求模m逆元的方法
在a|b(a能整除b)的前提下,計(jì)算(b/a)mod m的時(shí)候轉(zhuǎn)化為 計(jì)算(b*x)mod m ; 這時(shí)的x就是a的逆元(a模m的逆元);
此時(shí)x滿足? (a*x mod m == 1);
這個(gè)x的求法有一下兩種:
1)擴(kuò)展歐幾里得算法求解 a*x+m*y=1;? 因?yàn)?a*x mod m == 1?? <=>? a*x=1+m1*y?? <=>? a*x+m*y==1 ( m=-m1 )。
LL ExGcd(LL a,LL b,LL &x,LL &y){
if(!b)
{
x=1;
y=0;
return a;
}
LL ans=ExGcd(b,a%b,x,y);
LL temp=x;
x=y;
y=temp-a/b*y;
return ans;
}
LL getInverse(LL a,LL p)//a模n的乘法逆元
{
if(__gcd(a,p)!=1)
return -1;
LL x,y;
ExGcd(a,p,x,y);
return (x+p)%p;
}
2)如果有g(shù)cd(a,m)==1 ,即a,m互質(zhì),則a^(m-1) mod m==1 (這個(gè)定理在此不證明,有興趣去搜)? ;? 所以? [ a^(m-2) ] mod m 等價(jià)于 a^(-1) ;
此時(shí)a的逆元就是a^(-1)=x = [ a^(m-2) ] mod m 。
LL qpowMod(LL m,LL n,LL p)
{
LL ans=1;
LL temp=m;
while(n>0)
{
if(n&1)
ans=ans*temp % p;
temp=temp*temp % p;
n>>=1;
}
return ans;
}
LL _getInverse(LL a,LL p)
{
return qpowMod(a,p-2,p);
}
此外 當(dāng)a,m不是互質(zhì)數(shù),計(jì)算(b/a)mod m,沒(méi)辦法把b/a轉(zhuǎn)換成b×(a的逆元),可以用? (b/a)mod m == [ b mod (a*m) ] / a 來(lái)代替。
總結(jié)
以上是生活随笔為你收集整理的模为2的逆元是什么_两种求模m逆元的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android 照片特效,android
- 下一篇: java entity转dto_java