LL china2(LL m1,LL r1,LL m2,LL r2)
{
LL ans,y,k,r=r2-r1;
r=(r%m2+m2)%m2;
LL g=ex_gcd(m1,m2,y,k);
y=(y%m2+m2)%m2;
if(r%g) return -1;
y*=r/g;
return (y*m1+r1)%lcm(m1,m2);
}//c2
一次只能求两组,要求多组的话弄个循环就好了,如下
LL china(LL n,LL *m,LL *r)
{
LL am=m[0],ar=r[0];
LL i;
for(i=1;i<n;i++)
{
ar=china2(am,ar,m[i],r[i]);
if(ar<0) return -1;
am=lcm(am,m[i]);
}
return ar;
}