中国剩余定理

中国剩余定理

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;
}

posted @ 2017-04-17 23:34  Krew  阅读(139)  评论(0)    收藏  举报