同频余数尺排布对齐,求解线性同余方程组构造解
中国剩余定理 (CRT) 是数论中的一个经典定理,用于求解一元线性同余方程组。其在中国古代数学名著《孙子算经》中便有记载,被称为“物不知数”或“韩信点兵”问题。
“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”对应的同余方程组为:
设模数两两互质,设 $M = \prod_{i=1}^k m_i$。对于每一个方程 $i$,令辅助大模数 $M_i = M / m_i$:
// 扩欧计算模逆元
long long extGcd(long long a, long long b, long long &x, long long &y) {
if (b == 0) { x = 1; y = 0; return a; }
long long x1, y1;
long long d = extGcd(b, a % b, x1, y1);
x = y1; y = x1 - (a / b) * y1;
return d;
}
long long inv(long long a, long long m) {
long long x, y; extGcd(a, m, x, y); return (x % m + m) % m;
}
// CRT 核心求解
long long CRT(int k, long long a[], long long m[]) {
long long M = 1, ans = 0;
for (int i = 0; i < k; i++) M *= m[i];
for (int i = 0; i < k; i++) {
long long Mi = M / m[i];
long long ti = inv(Mi, m[i]);
ans = (ans + a[i] * Mi % M * ti % M) % M;
}
return ans;
}