中国剩余定理

中国剩余定理

1.中国剩余定理要解决的问题

假设现在有一个未知整数xx,满足

{x≡2(mod3),x≡3(mod5),x≡2(mod7)\begin{cases} x\equiv2\pmod3,\\ x\equiv3\pmod5,\\ x\equiv2\pmod7 \end{cases}

中国剩余定理想要解决的问题就是:

知道一个数对几个不同模数的余数,能不能把原来的数重新拼回来?

答案是:当这些模数两两互素时,可以。

2.中国剩余定理的正式内容

假设m1,m2,…,mkm_1,m_2,\ldots,m_k两两互素,也就是gcd⁡(mi,mj)=1(i≠j).\gcd(m_i,m_j)=1\qquad(i\ne j).

那么对于任意余数 a1,…,aka_1,\ldots,a_k,方程组

{x≡a1(modm1),x≡a2(modm2),⋮x≡ak(modmk)\begin{cases} x\equiv a_1\pmod{m_1},\\ x\equiv a_2\pmod{m_2},\\ \vdots\\ x\equiv a_k\pmod{m_k} \end{cases}

一定有解,而且这个解在模

M=m1m2⋯mkM=m_1m_2\cdots m_k

的意义下是唯一的。

“模 MM 唯一”不是说只有一个整数解,而是说所有解都是

x=x0+nM,n∈Z.x=x_0+nM,\qquad n\in\mathbb Z.

例如如果 x0=23,M=105x_0=23,M=105,那么23,128,233,338,…23,128,233,338,\ldots其实是同一个模 105105 的解。

3. 一个直观例子

回到开头的问题,求满足

{x≡2(mod3),x≡3(mod5),x≡2(mod7)\begin{cases} x\equiv2\pmod3,\\ x\equiv3\pmod5,\\ x\equiv2\pmod7 \end{cases}

的 xx。

因为 3,5,73,5,7 两两互素,所以 CRT 告诉我们:

  • 一定有解;
  • 解在模 3⋅5⋅7=1053\cdot5\cdot7=105 下唯一。

我们当然可以先试着找:

满足第一条的数是2,5,8,11,14,17,20,23,…2,5,8,11,14,17,20,23,\ldots

其中除以 55 余 33 的有8,23,38,…8,23,38,\ldots

再检查模 77:23≡2(mod7).23\equiv2\pmod7.

所以x≡23(mod105).\boxed{x\equiv23\pmod{105}}.

但枚举只适合很小的数字。CRT 真正重要的是它给出了一套系统的构造方法。

4. 思路:构造CRT 基底

假设现在有三个数 s1,s2,s3s_1,s_2,s_3,使得

 mod 3 mod 5 mod 7s1100s2010s3001\begin{array}{c|ccc} &\bmod3&\bmod5&\bmod7\\ \hline s_1&1&0&0\\ s_2&0&1&0\\ s_3&0&0&1 \end{array}

我们假设x=2s1+3s2+2s3x=2s_1+3s_2+2s_3,那xx是不是现在就满足:

{x=2s1+3s2+2s3≡2+0+0=2(mod3),x=2s1+3s2+2s3≡0+3+0=1(mod5),x=2s1+3s2+2s3≡0+0+2=1(mod7)\begin{cases} x=2s_1+3s_2+2s_3\equiv2+0+0=2\pmod3, \\x=2s_1+3s_2+2s_3\equiv0+3+0=1\pmod5, \\ x=2s_1+3s_2+2s_3\equiv0+0+2=1\pmod7 \end{cases}

我们就得到了xx。那下面我们来看怎么构造三个基底。


构造 s1s_1

要让它模 55、模 77 都等于 00,最简单的,直接取

5⋅7=35,5\cdot 7=35,

现在 35≡2(mod3)35\equiv2\pmod3,我们要把这个 22 调整成 11。

因为

2⋅2≡1(mod3),2\cdot2\equiv1\pmod3,

所以取

s1=35⋅2=70.s_1=35\cdot2=70.

验证:

70≡1(mod3),70≡0(mod5),70≡0(mod7).70\equiv1\pmod3,\qquad 70\equiv0\pmod5,\qquad 70\equiv0\pmod7.

构造 s2s_2

思路同上,先取另外两个模数的乘积:3⋅7=21.3\cdot7=21.

因为

21≡1(mod5),21\equiv1\pmod5,

所以直接取

s2=21.s_2=21.

构造 s3s_3

先取3⋅5=15.3\cdot5=15.

因为15≡1(mod7),15\equiv1\pmod7,

所以取

s3=15.s_3=15.

5. 用基底把余数拼起来

现在有了基底,我们构造

x=2s1+3s2+2s3=2⋅70+3⋅21+2⋅15=140+63+30=233.\begin{aligned} x &= 2s_1+3s_2+2s_3 \\ &=2\cdot70+3\cdot21+2\cdot15 \\ &=140+63+30 \\ &=233. \end{aligned}

因为我们计算的xx是模3⋅5⋅7=1053\cdot5\cdot7=105的,所以将它化到 0≤x<1050\le x<105:233≡23(mod105).233\equiv23\pmod{105}.

我们就得到

x≡23(mod105).\boxed{x\equiv23\pmod{105}}.

验证一下模 33 时:

x=2s1+3s2+2s3≡2⋅1+3⋅0+2⋅0=2(mod3).x=2s_1+3s_2+2s_3 \equiv2\cdot1+3\cdot0+2\cdot0 =2\pmod3.

模 55 和模 77 时同理。

6. 一般的 CRT 公式

设模数为 m1,…,mkm_1,\ldots,m_k,令

M=m1m2⋯mk,Mi=Mmi.M=m_1m_2\cdots m_k,\qquad M_i=\frac{M}{m_i}.

因为 MiM_i 与 mim_i 互素,所以 MiM_i 在模 mim_i 下有逆元。找一个 uiu_i,使得

uiMi≡1(modmi).u_iM_i\equiv1\pmod{m_i}.

然后定义

si=uiMi.s_i=u_iM_i.

这个 sis_i 自动满足

si≡1(modmi),s_i\equiv1\pmod{m_i},

而对于 j≠ij\ne i,

si≡0(modmj).s_i\equiv0\pmod{m_j}.

因此方程组的解是

x≡a1s1+a2s2+⋯+aksk(modM).\boxed{ x\equiv a_1s_1+a_2s_2+\cdots+a_ks_k\pmod M }.

还是用上面的例子

此时模数是m1=3m_1=3,m2=5m_2=5,m3=7m_3=7,令

M=3⋅5⋅7=105,M1=1053=35,M2=1055=21,M3=1057=15M=3\cdot 5\cdot 7=105, \\\quad M_1=\frac{105}{3}=35,\quad M_2 = \frac{105}{5}=21,\quad M_3 = \frac{105}{7}=15

找到u1=2u_1=2,u2=1u_2=1,u3=1u_3=1,那么s1=2⋅35=70s_1=2\cdot35=70,s2=21s_2=21,s3=15s_3=15,

题中的余数a1=2a_1=2,a2=3a_2=3,a3=2a_3=2。

得到x=2⋅70+3⋅21+2⋅15=233≡23(mod105)x=2\cdot 70 + 3\cdot 21 + 2\cdot 15 = 233\equiv 23 \pmod{105}

7. 为什么解一定“唯一”

假设 xx 和 yy 都满足同一组余数条件,那么对每个 ii 都有

x≡y(modmi).x\equiv y\pmod{m_i}.

因此

mi∣(x−y).m_i\mid(x-y).

也就是说,x−yx-y 同时能被所有 mim_i 整除。由于这些模数两两互素,它们的乘积也整除 x−yx-y:

M=m1⋯mk∣(x−y).M=m_1\cdots m_k\mid(x-y).

所以

x≡y(modM).x\equiv y\pmod M.

这就是“模 MM 唯一”。

8. 为什么要求模数两两互素

如果模数不互素,任意余数组合就不一定有解。

例如

x≡0(mod2),x≡1(mod4).x\equiv0\pmod2,\qquad x\equiv1\pmod4.

第一条说 xx 是偶数,第二条说 xx 除以 44 余 11,也就是奇数,两者矛盾,所以没有解。

Press Esc to close