逆元

\(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;
}
posted @ 2023-02-06 10:38  Cap1taL  阅读(28)  评论(0)    收藏  举报