一、费马小定理求逆元
有这样的结论:当模数p为质数,且a和p互质时,a的逆元为,配合快速幂求解
if(gcd(a,p)==1){
b=qmi(a,p-2,p);
}
LL qmi(int a, int b, int p)
{
LL res = 1;
while(b){
if(b & 1) res = res * a % p;
a = (LL)a * a % p;
b >>= 1;
}
return res;
}
二、扩展欧几里得求逆元
由a*b=1(mod p) ==> a*x+p*y=1 ,其中a,p已知,可用扩展欧几里得求解
如果a,p不互质,即d!=1,则逆元无解
注意:x,y有时候比较大,可以把x,y换成LL
int x,y;
exgcd(a,p,x,y);
x=(x%p+p)%p;
int exgcd(int a,int b,int &x,int &y){
if(!b){
x=1,y=0;
return a;
}
int d=exgcd(b,a%b,y,x);
y-=a/b*x;
return d;
}