写在前面
说实话第一次听到中国剩余定理有一种“来自东方的神秘力量”的感觉,可是仔细一想,为什么牛顿力学不叫英国力学,柯西不等式不叫法国不等式,拉格朗日中值定理不叫法国中值定理呢?怎么说呢,其实还是西方掌握了自然科学的话语体系emmm.【所以叫孙子定理好点?】
1852年,英国来华传教士伟烈亚力将《孙子算经》中“物不知数”问题的解法传至欧洲。1874年,英国数学家马西森指出此法符合1801年由高斯得出的关于同余式解法的一般性定理,因而西方称之为“中国剩余定理”。
定理重述
它研究什么
有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?
翻译成数学语言就是:求解方程组
{
x
≡
2
(
m
o
d
3
)
x
≡
3
(
m
o
d
5
)
x
≡
2
(
m
o
d
7
)
\left\{ \begin{aligned} &x\equiv 2(\bmod\,3)\\ &x\equiv 3(\bmod\,5)\\ &x\equiv 2(\bmod\,7) \end{aligned} \right.
⎩⎪⎨⎪⎧x≡2(mod3)x≡3(mod5)x≡2(mod7)
这样具体的问题的研究意义不是很大(但是具体问题的研究很重要),所以我们将其抽象一下
{
x
≡
a
1
(
m
o
d
m
1
)
x
≡
a
2
(
m
o
d
m
2
)
⋮
x
≡
a
n
(
m
o
d
m
n
)
\left\{ \begin{aligned} &x\equiv a_1(\bmod\,m_1)\\ &x\equiv a_2(\bmod\,m_2)\\ &\quad\quad\vdots\\ &x\equiv a_n(\bmod\,m_n) \end{aligned} \right.
⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧x≡a1(modm1)x≡a2(modm2)⋮x≡an(modmn)
研究这种方程组的解.注意到任何一个有解的不首1的同余方程(
x
x
x的系数不为1)都是可以通过辗转相除法然后回代化为首1的同余方程(由贝祖定理可以得到,有兴趣的读者可以参考第一篇随笔或自行证明).
另外,我们还要求
(
m
1
,
m
2
,
⋯
,
m
n
)
=
1
(m_1,m_2,\cdots,m_n)=1
(m1,m2,⋯,mn)=1,所有有解的方程组都可以化为这种形式.
数论倒数
何为数论倒数?我们知道在实数中,若
a
⋅
b
=
1
a\cdot b=1
a⋅b=1则
a
,
b
a,b
a,b互为倒数,这里我们将实数
a
,
b
a,b
a,b换为模
m
m
m同余类中的
[
a
]
m
,
[
b
]
m
[a]_m,[b]_m
[a]m,[b]m,乘法换为同余类的乘法,单位元换为
[
1
]
m
[1]_m
[1]m,可以得到数论倒数的定义:
若
a
⋅
b
≡
1
(
m
o
d
m
)
a\cdot b \equiv 1(\bmod\, m)
a⋅b≡1(modm),我们称
a
,
b
a,b
a,b互为模
m
m
m的数论倒数.
解是什么?
很显然的一点,这个方程组的解一定是模 [ m 1 , m 2 , ⋯ , m n ] [m_1,m_2,\cdots,m_n] [m1,m2,⋯,mn]同余的,因为每一个方程的解都是以 m i m_i mi为周期的,就是考虑 M = k i ⋅ m i = k i + 1 ⋅ m i + 1 , i = 1 , 2 , ⋯ , n − 1 M=k_i\cdot m_i=k_{i+1}\cdot m_{i+1},i=1,2,\cdots,n-1 M=ki⋅mi=ki+1⋅mi+1,i=1,2,⋯,n−1的最小值.由于模数是互素的,解的模数 M = m 1 m 2 ⋯ m n M=m_1m_2\cdots m_n M=m1m2⋯mn.那么我们只要找到一个特解就可以得到通解.
巧妙的特解
那么特解是如何找到的呢?我们观察这个和式:
∑
i
=
1
n
S
i
=
∑
i
=
1
n
a
i
M
i
t
i
=
a
1
M
1
t
1
+
⋯
+
a
n
M
n
t
n
\sum\limits_{i=1}^nS_i=\sum\limits_{i=1}^n a_iM_it_i=a_1M_1t_1+\cdots + a_nM_nt_n
i=1∑nSi=i=1∑naiMiti=a1M1t1+⋯+anMntn
其中
M
i
=
M
m
i
M_i = \dfrac{M}{m_i}
Mi=miM,
t
i
t_i
ti与
M
i
M_i
Mi互为数论倒数.
这是一个很精妙的构造.我们观察其中任意一项 S i = a i M i t i S_i=a_iM_it_i Si=aiMiti.由于 M i M_i Mi是除 m i m_i mi外其他 n − 1 n-1 n−1个方程模数的积,这一项可以被除 m i m_i mi外任意一个模数整除.而由于 M i , t i M_i,t_i Mi,ti在模 m i m_i mi时是互为倒数的,所以 a i M i t i a_iM_it_i aiMiti在模 m i m_i mi时和 a i a_i ai同余.
我们构造一个矩阵
A
A
A,
a
i
j
a_{ij}
aij为
S
i
=
a
i
M
i
t
i
(
m
o
d
m
j
)
S_i=a_iM_it_i(\bmod\, m_j)
Si=aiMiti(modmj)的值,说通俗点就是第
i
i
i行是和式的第
i
i
i项模
m
1
m_1
m1一直到
m
n
m_n
mn的结果,于是有
A
=
(
a
1
0
0
⋯
0
0
a
2
0
⋯
0
0
0
a
3
⋯
0
⋮
⋮
⋮
⋱
⋮
0
0
0
⋯
a
n
)
A=\left( \begin{array}{ccccc} a_1 & 0 & 0 & \cdots & 0\\ 0 & a_2 & 0 & \cdots & 0\\ 0&0&a_3&\cdots &0\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ 0 & 0 & 0 & \cdots & a_n \end{array} \right)
A=⎝⎜⎜⎜⎜⎜⎛a100⋮00a20⋮000a3⋮0⋯⋯⋯⋱⋯000⋮an⎠⎟⎟⎟⎟⎟⎞
我们可以发现
A
A
A的第
j
j
j列就是和式的每一项模
m
j
m_j
mj的余数.我们把矩阵的每一列都按行求和就是整个和式(特解)模
m
j
m_j
mj的结果记为
B
B
B,有
B
=
(
a
1
a
2
⋯
a
n
)
B = (a_1\quad a_2 \,\cdots \,a_n)
B=(a1a2⋯an)
恰好是方程组的所有模数.
跟证明 A ⋅ A ∗ = ∣ A ∣ ⋅ E A\cdot A^{*}=|A|\cdot E A⋅A∗=∣A∣⋅E异曲同工(我感觉)!
孙子怎么想到的
我也不知道,只知道很巧妙.