中国剩余定理和EXCRT

中国剩余定理

有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?

求满足以下条件的整数:除以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=2y1, 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} { y10(mod 35)y11(mod 3)
可得到 35 y 1 ≡ 1 ( m o d 3 ) . 35y_1\equiv 1(mod 3). 35y11(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). 35y11(mod 3)352y112(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=2y1+3y2+2y3.

以求 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) 35k1(mod3)的解,这是的 y 1 y_1 y1 5 ∗ 7 5*7 57 模3的逆元,记作 [ 3 5 − 1 ] 3 [35_{-1}]_3 [351]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=35k=57[(57)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=37[(37)1]5=371=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=35[(35)1]3=351=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(57[(57)1]3)+3(37[(37)1]5)+2(35[(35)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). x23(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} xa1(mod m1)xa2(mod m2)...xan(mod mn)
都存在整数解,且若 X , Y X,Y X,Y都是该方程组的一个解,则有 X ≡ Y ( m o d    N ) X\equiv Y(mod\ \ N) XY(mod  N),其中 N = ∏ i = 1 n m i N=\prod_{i=1}^nm_i N=i=1nmi
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) xi=1nai×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} { xb(mod  m)xc(mod  n)
恰有一个解 x x x, x x x的取值范围为 0 ⩽ x < m n . 0⩽x<mn. 0x<mn.

证明:
x ≡ b ( m o d    m ) x≡b(mod\ \ m) xb(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) mybc(mod n)mycb(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 0y1<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. 0x1<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} { x2(mod  3)x1(mod  4)
解:
由上述的公式: x 1 = m y 1 + b    ( 0 ≤ y 1 < n ) x_1=my_1+b\ \ (0≤y_1<n) x1=my1+b  (0y1<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 0y1<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). x12(mod  4).
y 1 = 1 y_1=1 y1=1时, x 1 ≡ 1 ( m o d    4 ) . x_1\equiv 1(mod\ \ 4). x11(mod  4).
y 1 = 2 y_1=2 y1=2时, x 1 ≡ 0 ( m o d    4 ) . x_1\equiv 0(mod\ \ 4). x10(mod  4).
y 1 = 3 y_1=3 y1=3时, x 1 ≡ 3 ( m o d    4 ) . x_1\equiv 3(mod\ \ 4). x13(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) x15(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} { xb(mod  m)xc(mod  n)
恰有一个解 0 ≤ x < m ⋅ n g c d ( m , n ) 0≤x<\frac{m\cdot n}{gcd(m,n)} 0x<gcd(m,n)mn,即在范围 [ 0 , l c m ( m , n )   ) [0,lcm(m,n)\ ) [0,lcm(m,n) )有唯一解。

我们按照同样的思路来证明这个过程:
x ≡ b ( m o d    m ) x≡b(mod\ \ m) xb(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) mybc(mod n)mycb(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) mycb(mod n)有解的前提是 d ∣ c − b . d|c-b. dcb.
假如 m y ≡ c − b ( m o d   n ) my\equiv c-b(mod \ n) mycb(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,(0y1<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)} 0x1<gcd(m,n)mn,即 0 ≤ x 1 < l c m ( m , n ) . 0≤x_1<lcm(m,n). 0x1<lcm(m,n).证毕。

参考资料:
1.https://zhuanlan.zhihu.com/p/44591114
2.《数论概念第三版》

猜你喜欢

转载自blog.csdn.net/Zerotogether/article/details/107456146