之前介绍Lucas
定理时,内容涉及到了中国剩余定理,以及欧拉定理。
后者应该是广为人知的定理(之后也会写拓展欧拉定理的吧),然而前者的名气似乎远有不如。
本篇以证明为主,(不喜欢证明的可以关了)当然也会遵循传统给出板子。
孙子剩余定理
设$m_1,m_2,\dots,m_k$为$k$个两两互素的正整数,$m=\prod{m_i}$。
令$m=m_iM_i$,则同余方程组
$$ \begin{cases} x &\equiv & b_1 \pmod{m_1} \newline x &\equiv & b_2 \pmod{m_2} \newline & \vdots & \newline x &\equiv & b_k \pmod{m_k} \end{cases} $$
有唯一解 $$x\equiv {\sum_{i=1}^{k}{b_iM_iM_i^{-1}}}\pmod{m},M_iM_i^{-1}\equiv1\pmod{m_i}$$
我们从基础解和基础解系的角度出发,构造这样一组基础解: $$ \begin{cases} x_1 & \equiv & 1 \pmod{m_1} \quad \newline x_1 & \equiv & 0 \pmod{m_2} \quad \newline & \vdots & \newline x_1 & \equiv & 0 \pmod{m_k} \quad \end{cases} \quad \dots \quad \begin{cases} x_k & \equiv & 0 \pmod{m_1} \quad \newline x_k & \equiv & 0 \pmod{m_2} \quad \newline & \vdots & \newline x_k & \equiv & 1 \pmod{m_k} \quad \end{cases} $$
由于$m_i$两两之间互素,我们很容易得到最初给的同余方程组的解,为:$\sum{b_ix_i}\mod m$.
单独考虑其中一个基础解
可以知道$x_i\mid [{m_1,m_2,\dots,m_k} \setminus { m_i}]$,即$x_i$应该为$\frac{m}{m_i}t$的形式,同时又由于$x_i\equiv 1\pmod{m_i}$,$x_i$同时也为$sm_i+1$的形式,其中($s,t\in \mathbb{Z}$)。
综合来看就是
$$\exists s,t \in \mathbb{Z}, \frac{m}{m_i}t=m_is+1=x_i$$
结果至此已经很明显了,即:
$$x_i\equiv\frac{m}{m_i}\times (\frac{m}{m_i})^{-1} \equiv 1\pmod{m_i}$$
没看出来的请自行百度拓展欧几里得,这里就不给详解了。
逆元的存在性可由$(\frac{m}{m_i}, m_i)=1$得到,又由于$m_i$两两互素,结果直接合并即可得到我们上面待证明的结论。
拓展问题
这里使我们的一个条件失效,即$m_i$两两互素。
再思考 - 合并同余式
从两个式子的情况开始:
$$ \begin{cases} x \equiv b_1 \pmod{m_1} \newline x \equiv b_2 \pmod{m_2} \end{cases} $$
我们令$(m_1, m_2)=d$,且两同余式有公共解$x_0$.
则有$\begin{cases}x_0\equiv b_1 \pmod{d} \newline x_0 \equiv b_2 \pmod{d} \end{cases}$,得到$d\mid(b_1-b_2)$。
这也是该方程组的有解的必要条件,充分性也很好证明。
我们把第一个同余方程的解表示为$x=b_1+m_1y$,代入第二个同余式有:
$$m_1y\equiv b_2-b_1\pmod{m_2}$$
要使上面的一次同余方程有解,则$(m_1,m_2)\mid (b_2-b_1)$,充分性get。
若已满足条件,则该方程对模数$\frac{m_2}{d}$有唯一解$y\equiv y_0\pmod{\frac{m_2}{d}}$
所以,
$$x=b_1+m_1y_0+\frac{m_1m_2}{d}t,(t=0,\pm1,\pm2,\dots)$$
观察最后的解,可以知道同余式组的解$x$对模数$[m_1,m_2]$唯一。
也就是,合并两个同余式为
$$x\equiv x_t\pmod{[m_1,m_2]}$$
代码
原理应该讲清楚了,代码一次给出吧。
|
|
相关的定理
若$m_1,m_2,\dots,m_k$为$k$个两两互素的正整数,$m=\prod{m_i}$。
则同余式$f(x)\equiv0\pmod{m}$有解的充分必要条件是 $$f(x)\equiv0\pmod{m_i}(i=1,2,\dots,k)$$ 对每一个$i$均有解。
若用$T_i$表示第$i$个方程的解数,则$f(x)\equiv0\pmod{m}$的解数$T=\prod{T_i}$。
证明从略。咕咕咕