//接口china(n,s,m) s表示除数数组,m表示每个除数对应的余数的数组,n表示除数的个数
void gcd(LL a,LL b,LL &d,LL &x,LL &y)
{
if(!b)
{
d = a;
x = 1;
y = 0;
}
else
{
gcd(b,a % b,d,y,x);
y -= x * (a / b);
}
}
int china (int n, int* s, int* m) {
LL M = 1, d, y, x = 0;
for (int i = 0; i < n; i++)
M *= m[i];
for (int i = 0; i < n; i++) {
LL w = M / m[i];
gcd(m[i], w, d, d, y);
x = (x + y * w * s[i]) % M;
}
return (x+M)%M;
}
中国剩余定理(模板)
最新推荐文章于 2021-07-18 15:34:07 发布