网上只说了CRT的证明过程,但我这样的蒟蒻全程只是跟着题解思路跑,但是没理解这个证明过程是怎么想到的,最近想了一下,这样CRT的推导就比较自然了
一般形式:
第一步:构造一个特殊解
为了简单,我们假设最终的解由满足对应方程的解的几个部分组成
设 \(y_1\) \(y_2\) ... \(y_n\) 分别满足对应的方程组
由一眼看穿法可得
那么为了保证加起来之后的模数不改变,\(y_i\) 以外的部分对第 \(i\) 个方程组的贡献为 \(0\)
即 \(y_j(j \neq i) \equiv 0 (\text{mod }m_i)\)
根据同余和整除的转化
所有的 \(y_j\) 均为 \(m_i\) 的倍数
这时候一个很明显的idea就来了:
\(a_i\) 显然是第 \(i\)个方程组的一个解
为了让 \(a_i\) 满足是其它模数的倍数
将 \(a_i\) 乘以\(m_j(j \neq i)\)
但是这样又会出来一个问题:现在\(a_i \times m_j\)不一定满足第 \(i\)个方程了
那么整出来一个逆元即可,
\(y_i = {a_i} \times {m_j} \times {m_j^-1}(\text{mod } m_i)\)
最后的解就是所有的\(y_i\)之和了
严谨证明见百度百科
第二步:构造一个通解,顺便证明这就是通解
充分性:存在解,则为这种形式
假设\(x_1\) \(x_2\)均满足上述方程组
则\(x_1\) \(x_2\)在模上述数时同余,即在\(m_i\) 整除\(x1-x2\)
则根据同余定理5:
若\(a \equiv b (mod m)\), \(a \equiv b (mod n)\) 则
\(a \equiv b (mod lcm(m,n))\)
设\(M\)为\(m_i\)之乘积
由于任意模数互质,所以\(x1 \equiv x2 (mod M)\)
所以\(x = kM+x0\)
必要性:若为这种形式,则为解
\(kM\)对每个方程组的贡献为\(0\),必要性显然
推论:在\((mod M)\)意义下只有一个唯一解
exCRT和CRT的共同点很少,只不过都用到了同余性质5:
若\(a \equiv b (mod m)\), \(a \equiv b (mod n)\) 则
\(a \equiv b (mod lcm(m,n))\)
把这个式子反复应用,就是exCRT
exCRT的逆命题也是成立的,正确性显然
设\(d = gcd(m,n)\)
\(m' = m/d, n' = n/d\)
\(m'n'd'|a-b\)
则\(m'd'|a-b\)且 \(n'd'|a-b\)
所以同余性质5是等价条件