中国剩余定理在于解决形如
一个数除五余二、除三余一 求此数最小值的算法问题,解决中国剩余定理需要引用两个方法--拓展欧几里得定理、以及求逆元的方法
ll extragcd(ll a, ll b, ll& x, ll& y)
{
if (!b) { x = 1; y = 0; return a; }
ll ans = extragcd(b, a % b, x, y);
ll t = x;
x = y;
y = t - a / b * y;
}
此处为拓展欧几里得算法
ll china(ll a[], ll b[], int n)
{
ll sum = 1;
for (int i = 1; i <= n; i++)
sum *= a[i];//求数组累乘之积
for (int i = 1; i <= n; i++)
{
ll w = sum / a[i];
ll tx = 0;
int t = extragcd(w, a[i], tx, y);
x = (x + w * b[i] / t * x) % sum;
}
return (x + sum) % sum;
}
此处为中国剩余定理