中国剩余定理(孙子定理)
一个数x,对于几个互质的数w[i],余数分别为a[i],求x最小解
模板如下:
//扩展欧几里得算法
ll Extended_Euclid(ll a,ll b,ll &x,ll &y)
{
int d;
if(b==0)
{
x=1;y=0;
return a;
}
d=Extended_Euclid(b,a%b,x,y);
ll temp=x;
x=y;
y=temp-a/b*y;
return d;
}
ll Chinese_Remainder(ll a[],ll w[],ll len)//a[]存放余数 w[]存放两两互质的数
{
ll i,d,x,y,m,n,ret;
ret=0;
n=1;
for(i=0;i<len;i++)
n*=w[i];
for(i=0;i<len;i++)
{
m=n/w[i];
d=Extended_Euclid(w[i],m,x,y);
ret=(ret+y*m*a[i])%n;
}
return (n+ret%n)%n;
}
出自:
http://blog.csdn.net/passion_acmer/article/details/52290361(里面有非常详细的解读)