一般求逆元有三种方法:扩欧、快速幂、递推
扩展欧几里得求逆元
由扩展欧几里得解丢番图方程可以得到逆元
(ll a,ll b,ll &x,ll &y)
ll exgcd{
if(b==0){x=1;y=0;return a;}
=exgcd(b,a%b,y,x);
ll d-=a/b*x;
yreturn d;
}
(ll a,ll m)
ll mod_inverse{
,y;
ll x(a,m,x,y);
exgcdreturn (x%m+m)%m;
}
快速幂求逆元
由费马小定理,
(ll a,ll m)
ll mod_inverse{
return fast_pow(a,m-2,m);
}
递推求逆元
对于
有
int inv[N];
void mod_inverse(ll n,ll p)
{
[1]=1;
invfor(int i=2;i<=n;i++)
{
[i]=(ll)(p-p/i)*inv[p%i]%p;
inv}
}