有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?
求满足以下条件的整数:除以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
证明:
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
当我们求出 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
(注: 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
当 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
参考资料:
1.https://zhuanlan.zhihu.com/p/44591114
2.《数论概念第三版》