中国剩余定理
1.中国剩余定理要解决的问题
假设现在有一个未知整数x,满足
⎩⎨⎧x≡2(mod3),x≡3(mod5),x≡2(mod7)
中国剩余定理想要解决的问题就是:
知道一个数对几个不同模数的余数,能不能把原来的数重新拼回来?
答案是:当这些模数两两互素时,可以。
2.中国剩余定理的正式内容
假设m1,m2,…,mk两两互素,也就是gcd(mi,mj)=1(i=j).
那么对于任意余数 a1,…,ak,方程组
⎩⎨⎧x≡a1(modm1),x≡a2(modm2),⋮x≡ak(modmk)
一定有解,而且这个解在模
M=m1m2⋯mk
的意义下是唯一的。
“模 M 唯一”不是说只有一个整数解,而是说所有解都是
x=x0+nM,n∈Z.
例如如果 x0=23,M=105,那么23,128,233,338,…其实是同一个模 105 的解。
3. 一个直观例子
回到开头的问题,求满足
⎩⎨⎧x≡2(mod3),x≡3(mod5),x≡2(mod7)
的 x。
因为 3,5,7 两两互素,所以 CRT 告诉我们:
- 一定有解;
- 解在模 3⋅5⋅7=105 下唯一。
我们当然可以先试着找:
满足第一条的数是2,5,8,11,14,17,20,23,…
其中除以 5 余 3 的有8,23,38,…
再检查模 7:23≡2(mod7).
所以x≡23(mod105).
但枚举只适合很小的数字。CRT 真正重要的是它给出了一套系统的构造方法。
4. 思路:构造CRT 基底
假设现在有三个数 s1,s2,s3,使得
s1s2s3mod3100mod5010mod7001
我们假设x=2s1+3s2+2s3,那x是不是现在就满足:
⎩⎨⎧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)
我们就得到了x。那下面我们来看怎么构造三个基底。
构造 s1
要让它模 5、模 7 都等于 0,最简单的,直接取
5⋅7=35,
现在 35≡2(mod3),我们要把这个 2 调整成 1。
因为
2⋅2≡1(mod3),
所以取
s1=35⋅2=70.
验证:
70≡1(mod3),70≡0(mod5),70≡0(mod7).
构造 s2
思路同上,先取另外两个模数的乘积:3⋅7=21.
因为
21≡1(mod5),
所以直接取
s2=21.
构造 s3
先取3⋅5=15.
因为15≡1(mod7),
所以取
s3=15.
5. 用基底把余数拼起来
现在有了基底,我们构造
x=2s1+3s2+2s3=2⋅70+3⋅21+2⋅15=140+63+30=233.
因为我们计算的x是模3⋅5⋅7=105的,所以将它化到 0≤x<105:233≡23(mod105).
我们就得到
x≡23(mod105).
验证一下模 3 时:
x=2s1+3s2+2s3≡2⋅1+3⋅0+2⋅0=2(mod3).
模 5 和模 7 时同理。
6. 一般的 CRT 公式
设模数为 m1,…,mk,令
M=m1m2⋯mk,Mi=miM.
因为 Mi 与 mi 互素,所以 Mi 在模 mi 下有逆元。找一个 ui,使得
uiMi≡1(modmi).
然后定义
si=uiMi.
这个 si 自动满足
si≡1(modmi),
而对于 j=i,
si≡0(modmj).
因此方程组的解是
x≡a1s1+a2s2+⋯+aksk(modM).
还是用上面的例子
此时模数是m1=3,m2=5,m3=7,令
M=3⋅5⋅7=105,M1=3105=35,M2=5105=21,M3=7105=15
找到u1=2,u2=1,u3=1,那么s1=2⋅35=70,s2=21,s3=15,
题中的余数a1=2,a2=3,a3=2。
得到x=2⋅70+3⋅21+2⋅15=233≡23(mod105)
7. 为什么解一定“唯一”
假设 x 和 y 都满足同一组余数条件,那么对每个 i 都有
x≡y(modmi).
因此
mi∣(x−y).
也就是说,x−y 同时能被所有 mi 整除。由于这些模数两两互素,它们的乘积也整除 x−y:
M=m1⋯mk∣(x−y).
所以
x≡y(modM).
这就是“模 M 唯一”。
8. 为什么要求模数两两互素
如果模数不互素,任意余数组合就不一定有解。
例如
x≡0(mod2),x≡1(mod4).
第一条说 x 是偶数,第二条说 x 除以 4 余 1,也就是奇数,两者矛盾,所以没有解。