Appearance
若无特殊说明,本章涉及的变量皆为正整数。
简介
中国剩余定理最早发现于《孙子算经》中。
有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?
即求满足下列条件的
它的通解公式为
《孙子算经》中只给出了最小正整数解,也就是
不过,今天我们只关心中国剩余定理更普遍的应用。
问题
中国剩余定理指关于
其中
解法
设
设
设
利用以上数据可以构造一个解:
其正确性显然。
模板
cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 16;
LL n, a[N], m[N], M[N], prodM = 1, ansX;
void exGcd(int a, int b, int &x, int &y) {
if (b == 0) { x = 1, y = 0; return; }
exGcd(b, a % b, x, y);
int t = x; x = y, y = t - a / b * y;
}
int main() {
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> a[i] >> m[i];
prodM *= m[i];
}
for (int i = 1; i <= n; i ++) {
M[i] = prodM / m[i];
LL x = 0, y = 0;
exGcd(M[i], m[i], x, y);
ansX += a[i] * M[i] * (x + m[i]) % m[i];
}
cout << ansX % prodM;
return 0;
}