已知a*x≡1(mod m) ,求a的逆元
解法1:若m是质数,可用快速幂求解
int qmi(int a, int b, int p)
{
int res=1;
while(b)
{
if(b&1) res=1ll*res*a%p;
b>>=1;
a=1ll*a*a%p;
}
return res;
}
//a的逆元:x=a^m-2
int x=qmi(a,m-2,m);
解法2:若m不是质数,只能用扩展欧几里得算法
//扩展欧几里得求逆元
int exgcd(int a,int b, int &x,int &y)
{
if(!b)
{
x=1,y=0;
return a;
}
int d=exgcd(b, a%b, x, y);
int t=y;
y=x-a/b*y, x=t;
return d;
}
int x,y;
int d=exgcd(a,m,x,y);
//a的逆元
x=(x%m+m)%m