中国剩余定理

假设有方程组x = ai(mod mi), 其中所有的mi两两互素, 另M为所有mi的乘积, wi = M / mi, 则gcd(wi, mi) = 1, 用扩展gcd可以得到wipi + miqi = 1的解, 然后ei = wipi, 则方程组等价于

x = e1a1 + e2a2 + .... + enan (mod M), 即在模M下方程组有唯一解。

View Code
 1  ll china(ll n, ll *a, ll *m)

 2  {

 3      ll M = 1, d, y, x = 0;

 4      for(int i = 0; i < n; ++i) M *= m[i];

 5      for(int i = 0; i < n; ++i)

 6      {

 7          ll w = M / m[i];

 8          gcd(m[i], w, d, d, y);

 9          x = (x + y * w * a[i]) % M;

10      }

11      return (x % M + M) % M;

12  }

 

你可能感兴趣的:(中国剩余定理)