线性同余方程组
今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?
上述问题便是一个具体线性同余方程组。所谓线性同余方程组,就是形如:
的方程组。
中国剩余定理
中国剩余定理是用于解决线性同余方程组的问题。
要使用中国剩余定理,必须得保证任意两个模数之间互质。
先说结论,上述方程的解为:
其中,\(M_i = \prod_{j = 1(i \neq j)}^{n}m_j\), \(b_i\)为 \(M_i\)的逆元。
对于中国剩余定理,我们可以这样理解:
对于方程组中,第 \(i\)个方程,如果能构造出这样一个解 \(x_i\),使得 \(x_i \equiv a_i \pmod {m_i}\),而 \(x_i \equiv 0 \pmod {m_j} (i \neq j)\),那么最终方程组的答案就是 \(\sum_{i = 1}^{n} x_i\)。
那么问题就换成了如何构造这样的一个解 \(x_i\)。要使得 \(x_i\)满足第二个条件,那么只需要 \(x_i\)里含有 \(M_i\)即可。
然后我们对 \(M_i\)求逆元 \(b_i\),也就是找到一个 \(b_i\)使其满足:
由于 \(M_i\)与 \(m_i\)互质,所以逆元肯定存在。(这也是为什么中国剩余定理要求任意两个模数之间互质的原因)
之后我们两边乘以一个 \(a_i\),就会得到:
那么, \(x_i = a_i M_i b_i\)就是我们所需要构造的解了。
扩展中国剩余定理
当线性同余方程组中,存在两个模数不互质的时候,就要用到扩展中国剩余定理。
我们可以用数学归纳法来证明(理解/构造)扩展中国剩余定理。
首先,对于第一个方程,\(x_1 = a_1\)显然是第一个方程的解。
然后对于第\(k\)个方程,定义 \(m = {\rm{lcm}}\{m_1, m_2, \cdots, m_{k - 1}\}\), \(x_{k - 1}\)为前 \(k - 1\)个方程的解。那么对于\(x_{k - 1} + tm\)肯定也是前 \(k - 1\)个方程的解(\(tm\)会被模掉)。那么在求解第 \(k\)个方程的时候,我们只需要找到一个参数 \(t\)使得满足 \(x_{k - 1} + tm \equiv a_k \pmod {m_k}\)。那么
对于 \(x_{k - 1} + tm \equiv a_k \pmod {m_k}\),这显然就是一个线性同余方程,用exgcd即可求解。当这个线性同余方程无解的时候,整个方程组也无解。
也就是:
时,同余方程有解。
整个过程就类似于两两个方程的解不断的合并,直到最后合并剩下最后一个解。
所以,当仅仅是判断方程组有没有解的情况,我们可以判断所有任意两个方程 \(i, j\),判断是否满足 \(\gcd{\{m_i, m_j\}} \mid a_i - a_j\)。不满足时,整个方程组无解。