扩展欧几里得:
LL extgcd(LL a,LL b,LL &x,LL &y)
{
if(b==0)
{
x=1,y=0;
return a;
}
LL g=extgcd(b,a%b,y,x);
y-=(a/b)*x;
return g;
}
快速幂:
LL powmod(LL a,LL b,LL c)
{
LL ans=1;
while(b)
{
if(b&1) ans*=a,ans%=c;
b>>=1;
a*=a;
a%=c;
}
return ans;
}
中国剩余定理:
LL chinese_remainder(LL cnt,LL a[],LL m[])
{
LL mc=1;
for(int i=0;i<cnt;i++)
mc*=m[i];
LL ans=0,x,y;
for(int i=0;i<cnt;i++)
{
extgcd(m[i],mc/m[i],x,y);
y=(y+m[i])%m[i];
ans+=a[i]*mc/m[i]%mc*y%mc;
ans%=mc;
}
return ans;
}