中国剩余定理(新)
定理内容
中国剩余定理(孙子定理),这是用来解出一堆线性同余方程组同一解的定理,通常会给出一对同余方程。如下,其中任意两个 \(mi\) 互质,求解 \(x\)
在定理中设有几个变量 \(M,M_i,t_i\),对于他们有关系
可以看出,其中 \(t_i\) 是 \(M_i\) 关于 \(m_i\) 的逆元。而 \(x\) 有
证明
由上面我们可以知道,中国剩余定理是通过构造来得到一组解, 因此只需要证明可行性即可。
你可以尝试带入进去。比如这里带入第一个式子 \(x \equiv a_1 \pmod {m_1}\)。因为 \(x\) 中除了第 \(1\) 项, 其他所有的 \(a_i \times M_i \times t_i\) 中的 \(M_i\) 里面都有 \(m_1\) 这个因子,那么其他项就可以被取模 \(m_1\) 给完美消掉,只剩下第一项 \(a_1 \times M_1 \times t_1\)。
又因为 \(M_i \times t_i \equiv 1 \pmod m_i\), 那么M1 * t1 在取模 \(m_1\) 下就为 \(1\) ,那么就只剩下 \(a_1\),符合等式 \(1\),对于其他的等式同理, 这就说明,这是一个正确解。
关于 \(t_i\) 一定有解。
因为
通过裴蜀定理可得式子
而 \(M_i \times t_i \equiv 1 \pmod {m_i}\),可以化成等式 \(M_i \times t_i + m_i \times y = 1\)
那么 \(M_i \times x + m_i \times y = 1\) 中的 \(x\) 就是 \(t_i\)。\(M_i\times x + m_i \times y = 1\) 存在,等式\(M_i \times t_i + m_i \times y = 1\) 就一定存在,\(x\) 一定有解,即 \(t_i\) 一定有解,那么 \(t_i\) 就一定可以通过 exgcd 求出。
值得一提的是 \(M\) 是所有 \(m_i\) 的乘积,那么通解应该也就知道了,即 \(x = x_0 + k \times M\)
我 \(x\) 加上 \(k\) 个 \(M\) 不影响每个 \(m_i\) 取余,它还是 \(a_i\),也就都是合法解。(这里有多组解的原因也是, 有 \(n\) 个式子但能找出来 \(n + 1\) 个未知数(把同余方程列乘等式),因此有无数解)
所以最小正整数解就是用代码就是 (x % M + M) % M