模为2的逆元是什么_两种求模m逆元的方法
在a|b(a能整除b)的前提下,計算(b/a)mod m的時候轉化為 計算(b*x)mod m ; 這時的x就是a的逆元(a模m的逆元);
此時x滿足? (a*x mod m == 1);
這個x的求法有一下兩種:
1)擴展歐幾里得算法求解 a*x+m*y=1;? 因為 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)如果有gcd(a,m)==1 ,即a,m互質,則a^(m-1) mod m==1 (這個定理在此不證明,有興趣去搜)? ;? 所以? [ a^(m-2) ] mod m 等價于 a^(-1) ;
此時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);
}
此外 當a,m不是互質數,計算(b/a)mod m,沒辦法把b/a轉換成b×(a的逆元),可以用? (b/a)mod m == [ b mod (a*m) ] / a 來代替。
總結
以上是生活随笔為你收集整理的模为2的逆元是什么_两种求模m逆元的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 照片特效,android
- 下一篇: java entity转dto_java