中国剩余定理
中国剩余定理
CRT用于求解一组模线性方程组的解:\(x\;mod\;m_i = a_i\)。
令\(M_i=\prod_{k=1\;and\;k\neq i}^nm_i\),求解\(w_iM_i+km_i=1\),则答案在模\(M\)意义下的唯一解为\(x=\sum_{i=1}^n w_iM_ia_i\)
代码:
void exgcd(LL a,LL b,LL &x,LL &y) {if (b==0) x=1,y=0; else exgcd(b,a%b,y,x),y-=(a/b)*x;}
LL CRT(int n,LL *p,LL *a)
{
LL M=1,ans=0,x,y,w;
rep(i,1,n) M*=p[i];
rep(i,1,n)
{
w=M/p[i];exgcd(w,p[i],x,y);
ans=(ans+w*x*a[i])%M;
}
return (ans+M)%M;
}

浙公网安备 33010602011771号