除法取模
以下只说这两个方法
1)费马小定理
a^(p-1)==1(mod)p a*a^(p-1)=1%M
a/b%mod=a*b^(mod-2)%mod;
只有p,mod为素数时,而一般都为素数。
b^(mod-2)一般用快速幂
typedef long long ll;
ll quick_pow(ll a,ll n)
{
ll ans=1;
while(n)
{
if(n&1)
{
ans*=a;
ans%=mod;//mod自己设置
}
a=a*a%mod;
n>>=1;
}
return ans;
}
2)扩展欧几里得
求a/b%mod=a*b1%mod。b1为b得逆元。利用exgcd(b,mod,x,y);b1=x;由于可能为负所以x=(x+mod)%mod。
扩展欧几里得模板
typedef long long ll;
ll e_gcd(ll a,ll b,ll &x,ll &y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
ll ans=e_gcd(b,a%b,y,x);
y-=x*(a/b);
return ans;
}