中国剩余定理
有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?
求满足以下条件的整数:除以3余2,除以5余3,除以7余2。
该问题最早见于《孙子算经》中,并有该问题的具体解法。
宋朝数学家秦九韶于 1247 年《数书九章》卷一、二《大衍类》对「物不知数」问题做出了完整系统的解答。
上面具体问题的解答口诀由明朝数学家程大位在《算法统宗》中给出:
三人同行七十希,五树梅花廿一支,七子团圆正半月,除百零五便得知。
2
×
70
+
3
×
21
+
2
×
15
=
233
=
2
×
105
+
23
2×70+3×21+2×15=233=2×105+23
2×70+3×21+2×15=233=2×105+23,故答案为
23.
23.
23.
问题1.计算一个整数
x
x
x,使得它满足除以3余2,除以5余3、除以7余2。
如果能够找到三个整数
x
1
,
x
2
,
x
3
x_1,x_2,x_3
x1,x2,x3,使得:
x 1 x_1 x1除以3余2、除以5余0、除以7余0;
x 2 x_2 x2除以3余0、除以5余3、除以7余0;
x 3 x_3 x3除以3余2、除以5余0、除以7余2;
仅 x = x 1 + x 2 + x 3 x=x_1+x_2+x_3 x=x1+x2+x3,就很容易验证 x x x满足除以3余2,除以5余3、除以7余2.
对问题1-1继续分解,哪果能找到一个整数
y
1
y_1
y1使得
y
1
y_1
y1除以3余1,除以5余0、除以7余为0.
令
x
1
=
2
∗
y
1
x_1=2*y_1
x1=2∗y1,
x
1
x_1
x1满足除以3余2,除以5余0,除以7为0.
简单证明:
由
{
y
1
≡
0
(
m
o
d
35
)
y
1
≡
1
(
m
o
d
3
)
\begin{cases} y_1\equiv 0 (mod\ 35) \\y_1\equiv 1 (mod\ 3) \end{cases}
{y1≡0(mod 35)y1≡1(mod 3)
可得到
35
y
1
≡
1
(
m
o
d
3
)
.
35y_1\equiv 1(mod 3).
35y1≡1(mod3).
由同余的性质【设c与m互素,则 a≡b(mod m)↔ca≡cb(mod m)】可得:
2与3互素,可以得到
35
⋅
y
1
≡
1
(
m
o
d
3
)
↔
35
⋅
2
⋅
y
1
≡
1
⋅
2
(
m
o
d
m
)
.
35\cdot y_1\equiv1(mod \ 3)\leftrightarrow 35\cdot2\cdot y_1 \equiv 1\cdot2(mod \ m).
35⋅y1≡1(mod 3)↔35⋅2⋅y1≡1⋅2(mod m).
x
1
=
2
y
1
x_1=2y_1
x1=2y1得证。
如果求出 y 1 y_1 y1,那么就可以求出 x 1 x_1 x1,再以同样的方法求出 x 2 , x 3 x_2,x_3 x2,x3,那么 x x x的值也就求出来了。
设 y 1 y_1 y1为除以3余1,除以5余0,除以7余0的解;
设 y 2 y_2 y2为除以3余0,除以5余1,除以7余0的解;
设 y 3 y_3 y3为除以3余0,除以5余0,除以7余1的解。
如果找到了 y 1 , y 2 , y 3 y_1,y_2,y_3 y1,y2,y3,那么 x = 2 ∗ y 1 + 3 ∗ y 2 + 2 ∗ y 3 . x=2*y_1+3*y_2+2*y_3. x=2∗y1+3∗y2+2∗y3.
以求
y
1
y_1
y1为例,已知
y
1
y_1
y1除以3余1、除以5余0、除以7余0,那么
y
1
y_1
y1必然整除35,设
y
1
=
35
k
y_1=35k
y1=35k
于是我们只需要求同余方程
35
⋅
k
≡
1
(
m
o
d
3
)
35\cdot k\equiv 1(mod 3)
35⋅k≡1(mod3)的解,这是的
y
1
y_1
y1是
5
∗
7
5*7
5∗7 模3的逆元,记作
[
3
5
−
1
]
3
[35_{-1}]_3
[35−1]3.求解此同余方程的最小正整数解
k
=
2
k=2
k=2.
解得:
y
1
=
35
⋅
k
=
5
∗
7
∗
[
(
5
∗
7
)
−
1
]
3
y_1=35\cdot k=5*7*[(5*7)^{-1}]_3
y1=35⋅k=5∗7∗[(5∗7)−1]3
按照同样的方式求出
y
2
y_2
y2和
y
3
y_3
y3:
y
2
=
3
∗
7
∗
[
(
3
∗
7
)
−
1
]
5
=
3
∗
7
∗
1
=
21.
y_2=3*7*[(3*7)^{-1}]_5=3*7*1=21.
y2=3∗7∗[(3∗7)−1]5=3∗7∗1=21.
y
3
=
3
∗
5
∗
[
(
3
∗
5
)
−
1
]
3
=
3
∗
5
∗
1
=
15.
y3=3*5*[(3*5)^{-1}]_3=3*5*1=15.
y3=3∗5∗[(3∗5)−1]3=3∗5∗1=15.
那么
x
x
x的值为:
x
=
2
∗
(
5
∗
7
∗
[
(
5
∗
7
)
−
1
]
3
)
+
3
∗
(
3
∗
7
∗
[
(
3
∗
7
)
−
1
]
5
)
+
2
∗
(
3
∗
5
∗
[
(
3
∗
5
)
−
1
]
3
)
x=2*(5*7*[(5*7)^{-1}]_3)+3*(3*7*[(3*7)^{-1}]_5)+2*(3*5*[(3*5)^{-1}]_3)
x=2∗(5∗7∗[(5∗7)−1]3)+3∗(3∗7∗[(3∗7)−1]5)+2∗(3∗5∗[(3∗5)−1]3)
x
=
2
×
70
+
3
×
21
+
2
×
15
=
233.
x=2×70+3×21+2×15=233.
x=2×70+3×21+2×15=233.
最后 ,注意到,如果
x
x
x满足除以3余2、除以5余3、除以7余2,那么
x
+
105
x+105
x+105也同样满足。
因此要计算满足要求的最小的非负整数,就只需要计算总和除以105的余数即可,即 x = 23 x=23 x=23,通解为 x ≡ 23 ( m o d 105 ) . x\equiv 23(mod \ \ 105). x≡23(mod 105).
最后,我们再来总结一下中国剩余定理的定义:
假设整数
m
1
,
m
2
,
.
.
.
,
m
n
m_1,m_2,...,m_n
m1,m2,...,mn两两互素,则对于任意的整数
a
1
,
a
2
,
a
3
,
.
.
.
,
a
n
a_1,a_2,a_3,...,a_n
a1,a2,a3,...,an,方程组
{
x
≡
a
1
(
m
o
d
m
1
)
x
≡
a
2
(
m
o
d
m
2
)
.
.
.
x
≡
a
n
(
m
o
d
m
n
)
\begin{cases} x\equiv a_1(mod\ m_1) \\ x\equiv a_2(mod\ m_2) \\... \\x\equiv a_n(mod\ m_n) \end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧x≡a1(mod m1)x≡a2(mod m2)...x≡an(mod mn)
都存在整数解,且若
X
,
Y
X,Y
X,Y都是该方程组的一个解,则有
X
≡
Y
(
m
o
d
N
)
X\equiv Y(mod\ \ N)
X≡Y(mod N),其中
N
=
∏
i
=
1
n
m
i
N=\prod_{i=1}^nm_i
N=i=1∏nmi
x
≡
∑
i
=
1
n
a
i
×
N
m
i
×
[
(
N
m
i
)
−
1
]
m
i
(
m
o
d
N
)
x\equiv \sum_{i=1}^na_i×\frac{N}{mi}×[(\frac{N}{m_i})_{-1}]_{m_i} \ \ \ (mod\ \ N)
x≡i=1∑nai×miN×[(miN)−1]mi (mod N)
说到这里,可能有的同学不明白为什么最后的解要和
N
N
N取模且解在
[
0
,
N
)
[0,N)
[0,N)的范围中是唯一的。
在这里,引用一下《数论概论》中关于中国剩余定理的证明,相信大家会明白的。
设
m
m
m与
n
n
n是整数,
g
c
d
(
m
,
n
)
=
1
gcd(m,n)=1
gcd(m,n)=1,
b
b
b与
c
c
c是任意整数,则同余式组
{
x
≡
b
(
m
o
d
m
)
x
≡
c
(
m
o
d
n
)
\begin{cases} x≡b(mod\ \ m) \\x≡c(mod \ \ n)\end{cases}
{x≡b(mod m)x≡c(mod n)
恰有一个解
x
x
x,
x
x
x的取值范围为
0
⩽
x
<
m
n
.
0⩽x<mn.
0⩽x<mn.
证明:
x
≡
b
(
m
o
d
m
)
x≡b(mod\ \ m)
x≡b(mod m)的解
x
x
x由
x
=
m
y
+
b
x=my+b
x=my+b的所有数组成,将此代入第二个同余式,得:
m
y
−
b
≡
c
(
m
o
d
n
)
→
m
y
≡
c
−
b
(
m
o
d
n
)
my-b\equiv c(mod \ n) \rightarrow my\equiv c-b(mod \ n)
my−b≡c(mod n)→my≡c−b(mod n)
已知
g
c
d
(
m
,
n
)
=
1
gcd(m,n)=1
gcd(m,n)=1,根据线性同余定理可知同余式在
[
0
,
n
)
[0,n)
[0,n)范围内恰有一个解
y
1
y_1
y1且
0
≤
y
1
<
n
0≤y_1<n
0≤y1<n。
当我们求出
y
1
y_1
y1的值,那么同余式方程组的解
x
1
x_1
x1的值为:
x
1
=
m
y
1
+
b
x_1=my_1+b
x1=my1+b
因为在0与
n
n
n之间有唯一解
y
1
y_1
y1,用
m
m
m乘
y
1
y_1
y1得到了
x
1
x_1
x1,那么唯一解
x
1
x_1
x1的取值范围为
0
≤
x
1
<
m
n
.
0≤x_1<mn.
0≤x1<mn.
(注:
x
1
x_1
x1是由
m
y
1
+
b
my_1+b
my1+b得到的,在计算
x
1
x_1
x1的取值范围时为什么把给
b
b
b忽略掉了?这是因为
m
y
1
+
b
my_1+b
my1+b关于模
m
m
m和
b
b
b同余,当
b
b
b取正数时,可以取一个对应同余的负数,让
m
y
1
+
b
my_1+b
my1+b的值始终处于
m
n
mn
mn之下 )
对于一些简单的同余方程组,有了上述的定义之后,有的时候我们可以采用枚举的方式来计算同余组的解。
例.解下列同余方程组
{
x
≡
2
(
m
o
d
3
)
x
≡
1
(
m
o
d
4
)
\begin{cases} x\equiv 2 (mod \ \ 3)\\x\equiv 1(mod\ \ 4)\end{cases}
{x≡2(mod 3)x≡1(mod 4)
解:
由上述的公式:
x
1
=
m
y
1
+
b
(
0
≤
y
1
<
n
)
x_1=my_1+b\ \ (0≤y_1<n)
x1=my1+b (0≤y1<n)可知,
m
=
3
,
b
=
2
m=3,b=2
m=3,b=2,枚举
y
1
y_1
y1(
0
≤
y
1
<
4
0≤y_1<4
0≤y1<4)验证
x
1
=
3
y
1
+
2
x_1=3y_1+2
x1=3y1+2是否满足方程2。
当
y
1
=
0
y_1=0
y1=0时,
x
1
≡
2
(
m
o
d
4
)
.
x_1\equiv 2(mod\ \ 4).
x1≡2(mod 4).
当
y
1
=
1
y_1=1
y1=1时,
x
1
≡
1
(
m
o
d
4
)
.
x_1\equiv 1(mod\ \ 4).
x1≡1(mod 4).
当
y
1
=
2
y_1=2
y1=2时,
x
1
≡
0
(
m
o
d
4
)
.
x_1\equiv 0(mod\ \ 4).
x1≡0(mod 4).
当
y
1
=
3
y_1=3
y1=3时,
x
1
≡
3
(
m
o
d
4
)
.
x_1\equiv 3(mod\ \ 4).
x1≡3(mod 4).
根据上面的枚举过程,当
y
1
=
1
y_1=1
y1=1时满足方程2,
x
1
=
3
+
2
=
5
x_1=3+2=5
x1=3+2=5,即
x
1
≡
5
(
m
o
d
12
)
x_1\equiv 5(mod\ \ 12)
x1≡5(mod 12)为同余组的解。
扩展中国剩余定理
如果同余方程组的 m m m和 n n n不互质怎么办呢?
定义: 同余方程组:
{
x
≡
b
(
m
o
d
m
)
x
≡
c
(
m
o
d
n
)
\begin{cases} x≡b(mod\ \ m) \\x≡c(mod \ \ n)\end{cases}
{x≡b(mod m)x≡c(mod n)
恰有一个解
0
≤
x
<
m
⋅
n
g
c
d
(
m
,
n
)
0≤x<\frac{m\cdot n}{gcd(m,n)}
0≤x<gcd(m,n)m⋅n,即在范围
[
0
,
l
c
m
(
m
,
n
)
)
[0,lcm(m,n)\ )
[0,lcm(m,n) )有唯一解。
我们按照同样的思路来证明这个过程:
x
≡
b
(
m
o
d
m
)
x≡b(mod\ \ m)
x≡b(mod m)的解
x
x
x由
x
=
m
y
+
b
x=my+b
x=my+b的所有数组成,将此代入第二个同余式,得:
m
y
−
b
≡
c
(
m
o
d
n
)
→
m
y
≡
c
−
b
(
m
o
d
n
)
my-b\equiv c(mod \ n) \rightarrow my\equiv c-b(mod \ n)
my−b≡c(mod n)→my≡c−b(mod n)
设
g
c
d
(
m
,
n
)
=
d
gcd(m,n)=d
gcd(m,n)=d,因为
d
>
1
d>1
d>1,同余式
m
y
≡
c
−
b
(
m
o
d
n
)
my\equiv c-b(mod \ n)
my≡c−b(mod n)有解的前提是
d
∣
c
−
b
.
d|c-b.
d∣c−b.
假如
m
y
≡
c
−
b
(
m
o
d
n
)
my\equiv c-b(mod \ n)
my≡c−b(mod n)有解,则在范围
[
0
,
n
)
[0,n)
[0,n)有
d
d
d个不同余的解。(都是同余方程里面的性质,不清楚的重新学习同余方程的内容)
因此在范围
[
0
,
n
d
)
[0,\frac{n}{d})
[0,dn)中,有唯一解
y
1
,
(
0
≤
y
1
<
n
d
)
y_1,(0≤y_1<\frac{n}{d})
y1,(0≤y1<dn).
又因为
x
1
=
m
y
1
+
b
x_1=my_1+b
x1=my1+b ,那么唯一解
x
1
x_1
x1的取值范围为
0
≤
x
1
<
m
n
g
c
d
(
m
,
n
)
0≤x_1<\frac{mn}{gcd(m,n)}
0≤x1<gcd(m,n)mn,即
0
≤
x
1
<
l
c
m
(
m
,
n
)
.
0≤x_1<lcm(m,n).
0≤x1<lcm(m,n).证毕。
参考资料:
1.https://zhuanlan.zhihu.com/p/44591114
2.《数论概念第三版》