求 \(b\) 在 \(\mod{p}\) 下的逆元
1.exgcd
条件:\(a,b\) 互质
void exgcd(int a,int b,int &x,int &y){
if(!b) x=1,y=0;
else exgcd(b,a%b,y,x),y-=a/b*x;
}
exgcd(a,p,inv,b);
inv=(inv%p+p)%p;
2.费马小定理&快速幂
条件:\(p\) 为质数
int ksm(int a,int b){
if(b==0) return 1;
if(b==1) return a;
int t=ksm(a,b/2);
if(b&1) return t*t%p;
else return t*t%p*a%p;
}
inv=ksm(a,p-2);
inv=(inv%p+p)%p;
3.线性求逆元
结论:\(inv_i=-\lfloor\dfrac{p}{i}\rfloor*inv_{p\%i}\)
条件:\([1,n]\) 中的所有数与 \(p\) 互质。
int inv[MAXN];
inv[1]=1;
for(int i=2;i<=n;i++){
inv[i]=-(p/i)*inv[p%i];
inv[i]=(inv[i]%p+p)%p;
}
标签:return,int,inv,exgcd,逆元,ksm
From: https://www.cnblogs.com/XHZS-XY/p/17094685.html