扩展中国剩余定理(EXCRT)
扩展中国剩余定理
前置知识:线性同余方程合并
假设我们要合并以下两个方程:
第一步:将方程转化为线性形式
从第一个方程 \(x \equiv a \pmod{m}\) 可知:
将这个表达式代入第二个方程 \(x \equiv b \pmod{n}\):
第二步:整理成标准线性同余方程
将上述等式重新排列:
现在,我们得到了一个关于 \(k\) 的线性同余方程:
第三步:判断解是否存在
计算最大公约数:\(d = \gcd(m, n)\)
有解的条件:当且仅当 \(d \mid (b - a)\)(即 \(d\) 能整除 \(b - a\))
如果 \(d \nmid (b - a)\),则方程组无解
第四步:求解线性同余方程(如果有解)
如果 \(d \mid (b - a)\),对方程两边同时除以 \(d\):
令:
- \(m' = \frac{m}{d}\)
- \(n' = \frac{n}{d}\)
- \(b' = \frac{b - a}{d}\)
方程变为:
由于 \(\gcd(m', n') = 1\),这个方程有唯一解模 \(n'\)。
第五步:求特解 \(k_0\)
使用扩展欧几里得算法求解:
得到一个特解 \(k_0\),使得:
那么原方程的特解为:
第六步:写出通解形式
\(k\) 的通解为:
第七步:代回原式求 \(x\)
将 \(k\) 的通解代入 \(x = a + m \cdot k\):
注意:\(m \cdot n' = m \cdot \frac{n}{d} = \frac{m \cdot n}{\gcd(m, n)} = \text{lcm}(m, n)\)
第八步:得到合并后的方程
最终合并结果为:
中国剩余定理
对于这样一组同余方程,中国人欧拉在所有 \(m\) 都互质的条件下找到了一个通解。
设 $ m = \prod_{i = 1}^{n} m_i,M_i = m / m_i,t_i \(为\) M_i $ 模 $ m_i $ 的逆元,则有:
ps:\(a_iM_it_i\)相乘时不取模。
这十分好证明。
对于每一个 \(a_i M_i t_i\) 只会对第 \(i\) 个方程有贡献,因为对于别的方程(假设对于第 \(j\) 个方程),\(a_i M_i t_i \equiv 1 \pmod{m_j}\),因为 \(t_i\) 中包含了 \(a_i M_i\) 模 \(m_j\) 的逆元。
接下来扩展到每个 \(m_i\) 不一定互质的情况。
ps:不一定有解。
核心思想:逐步合并方程
扩展中国剩余定理的算法核心是:将两个同余方程合并成一个,然后一步步合并,直到只剩下一个方程。
如果中途有无法合并的情况,那就判断成无解。
最后剩下的方程的解就是原方程解。

浙公网安备 33010602011771号