中国剩余定理—— 一次同余方程组解法

文章目录

  • 写在前面
  • 问题的提出
  • 一次同余方程组的计算过程
  • 中国剩余定理
    • 一次同余方程组的求解
    • 例题求解
    • 补充

写在前面

总结一下中国剩余定理,即一次同余方程组的解的存在性分析及计算,为之后的欧拉函数定理部分做铺垫。这部分内容在南宋时期由数学家秦九韶最先得出。

P.S. 本文具体内容可查看《数学的思维方式与创新》,丘维声著。在该书的第26页下面关于一次同余方程组的其他解的求解过程部分有一点小问题,应该是 d ≡ c (  ⁣ ⁣ ⁣ ⁣ m o d    m i ) d\equiv c(\!\!\!\!\mod m_i) dc(modmi),书中那样写成了 c ≡ d (  ⁣ ⁣ ⁣ ⁣ m o d    m i ) c\equiv d(\!\!\!\!\mod m_i) cd(modmi),理论上讲没有问题,但是写成 d ≡ c (  ⁣ ⁣ ⁣ ⁣ m o d    m i ) d\equiv c(\!\!\!\!\mod m_i) dc(modmi)更符合实际。

问题的提出

一个连的士兵三三数余2,五五数余4,七七数余2,问士兵有多少人。

设士兵共有 x x x人,则可得到:

{ x ≡ 2   (  ⁣ ⁣ ⁣ ⁣ m o d    3 ) , x ≡ 4   (  ⁣ ⁣ ⁣ ⁣ m o d    5 ) , x ≡ 2   (  ⁣ ⁣ ⁣ ⁣ m o d    7 ) , \begin{cases} x\equiv2\,(\!\!\!\!\mod3),\\ x\equiv4\,(\!\!\!\!\mod5),\\ x\equiv2\,(\!\!\!\!\mod7),\\ \end{cases} x2(mod3),x4(mod5),x2(mod7),

上述的方程组称为一次同余方程组,下面推导其计算方法。

一次同余方程组的计算过程

将上述问题一般化,有:

m 1 ,   m 2 ,   ⋯   ,   m s m_1,\,m_2,\,\cdots,\,m_s m1,m2,,ms是两两互素且均大于1的整数, b 1 ,   ⋯   ,   b s b_1,\,\cdots,\,b_s b1,,bs是任意给定的整数,考虑如下的一次同余方程组:

{ x ≡ b 1   (  ⁣ ⁣ ⁣ ⁣ m o d    m 1 ) , x ≡ b 2   (  ⁣ ⁣ ⁣ ⁣ m o d    m 2 ) , ⋯ ⋯ ⋯ ⋯ ⋯ x ≡ b s   (  ⁣ ⁣ ⁣ ⁣ m o d    m s ) , \begin{cases} x\equiv b_1\,(\!\!\!\!\mod m_1),\\ x\equiv b_2\,(\!\!\!\!\mod m_2),\\ \cdots\cdots\cdots\cdots\cdots\\ x\equiv b_s\,(\!\!\!\!\mod m_s),\\ \end{cases} xb1(modm1),xb2(modm2),xbs(modms),

由于 m 1 ,   ⋯   ,   m s m_1,\,\cdots,\,m_s m1,,ms两两互素,应用互素的性质3的推广(可参见与素数有关的一些性质及证明(一))可以得到:

i ∈ { 1 ,   2 ,   ⋯   ,   s } i\in\{1,\,2,\,\cdots,\,s\} i{1,2,,s},有

( m i ,   ∏ j ≠ i m j ) = 1 , \left(m_i,\,\prod\limits_{j\neq i}m_j\right)=1, mi,j=imj=1,

从而,存在 u i ,   v i ∈ Z u_i,\,v_i\in\mathbb{Z} ui,viZ,使得

u i m i + v i ∏ j ≠ i m j = 1 , ( 整数互素的充要条件 ) u_im_i+v_i\prod\limits_{j\neq i}m_j=1,\quad(\text{\color{red}整数互素的充要条件}) uimi+vij=imj=1,(整数互素的充要条件)

于是得到

v i ∏ j ≠ i m j = 1 − u i m i , v_i\prod\limits_{j\neq i}m_j=1-u_im_i, vij=imj=1uimi,

所以有

{ v i ∏ j ≠ i m j ≡ 1 (  ⁣ ⁣ ⁣ ⁣ m o d    m i ) , v i ∏ j ≠ i m j ≡ 0 (  ⁣ ⁣ ⁣ ⁣ m o d    m k ) , ( k ≠ i ) \begin{cases} v_i\prod\limits_{j\neq i}m_j\equiv 1(\!\!\!\!\mod m_i),\\ v_i\prod\limits_{j\neq i}m_j\equiv 0 (\!\!\!\!\mod m_k),\quad(k\neq i) \end{cases} vij=imj1(modmi),vij=imj0(modmk),(k=i)

显然,要构造余数为 b i b_i bi,只需将上式左右同乘以 b i b_i bi并求和即可,于是令

c = b 1 v 1 ∏ j ≠ i m j + ⋯ + b i v i ∏ j ≠ i m j + ⋯ + b s v s ∏ j ≠ i m j , (1) c=b_1v_1\prod\limits_{j\neq i}m_j+\cdots+b_iv_i\prod\limits_{j\neq i}m_j+\cdots+b_sv_s\prod\limits_{j\neq i}m_j,\tag{1} c=b1v1j=imj++bivij=imj++bsvsj=imj,(1)

则可得

c ≡ b 1 0 + ⋯ + b i 1 + ⋯ + b s 0 ≡ b i (  ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ m o d    m i ) , ( i = 1 ,   2 ,   ⋯   ,   s ) c\equiv b_10+\cdots+b_i1+\cdots+b_s0\equiv b_i(\!\!\!\!\!\!\mod m_i),\quad(i=1,\,2,\,\cdots,\,s) cb10++bi1++bs0bi(modmi),(i=1,2,,s)

所以,由 ( 1 ) (1) (1)式构造的 c c c是一次同余方程组的一个解。

下面寻找这个方程组的其他解。

d d d是方程组的另解,则显然
d ≡ c (  ⁣ ⁣ ⁣ m o d    m i ) , ( i = 1 ,   2 ,   ⋯   ,   s ) d\equiv c(\!\!\!\mod m_i),\quad(i=1,\,2,\,\cdots,\,s) dc(modmi),(i=1,2,,s)

m i   ∣   d − c , ( i = 1 ,   2 ,   ⋯   ,   s ) m_i\,|\,d-c,\quad(i=1,\,2,\,\cdots,\,s) midc,(i=1,2,,s)

由于 m 1 ,   ⋯   ,   m s m_1,\,\cdots,\,m_s m1,,ms两两互素,应用互素的性质2的推广(可参见与素数有关的一些性质及证明(一))可以得到

m 1 m 2 ⋯ m s   ∣   d − c , m_1m_2\cdots m_s\,|\,d-c, m1m2msdc,

于是可以得到

d ≡ c (  ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ m o d    m 1 m 2 ⋯ m s ) . d\equiv c(\!\!\!\!\!\!\mod m_1m_2\cdots m_s). dc(modm1m2ms).

中国剩余定理

根据上面的讨论,显然可以得到下述定理:

m 1 ,   m 2 ,   ⋯   ,   m s m_1,\,m_2,\,\cdots,\,m_s m1,m2,,ms是两两互素且均大于1的整数, b 1 ,   ⋯   ,   b s b_1,\,\cdots,\,b_s b1,,bs是任意给定的整数,一次同余方程组

{ x ≡ b 1   (  ⁣ ⁣ ⁣ ⁣ m o d    m 1 ) , x ≡ b 2   (  ⁣ ⁣ ⁣ ⁣ m o d    m 2 ) , ⋯ ⋯ ⋯ ⋯ ⋯ x ≡ b s   (  ⁣ ⁣ ⁣ ⁣ m o d    m s ) , \begin{cases} x\equiv b_1\,(\!\!\!\!\mod m_1),\\ x\equiv b_2\,(\!\!\!\!\mod m_2),\\ \cdots\cdots\cdots\cdots\cdots\\ x\equiv b_s\,(\!\!\!\!\mod m_s),\\ \end{cases} xb1(modm1),xb2(modm2),xbs(modms),

Z \mathbb{Z} Z中有解,其全部解是

c + k m 1 m 2 ⋯ m s , k ∈ Z , c+km_1m_2\cdots m_s,\quad k\in \mathbb{Z}, c+km1m2ms,kZ,

其中

c = b 1 v 1 ∏ j ≠ i m j + ⋯ + b i v i ∏ j ≠ i m j + ⋯ + b s v s ∏ j ≠ i m j , c=b_1v_1\prod\limits_{j\neq i}m_j+\cdots+b_iv_i\prod\limits_{j\neq i}m_j+\cdots+b_sv_s\prod\limits_{j\neq i}m_j, c=b1v1j=imj++bivij=imj++bsvsj=imj,

v i v_i vi满足

u i m i + v i ∏ j ≠ i m j = 1 , ( i = 1 ,   2 ,   ⋯   ,   s ) . u_im_i+v_i\prod\limits_{j\neq i}m_j=1,\quad(i=1,\,2,\,\cdots,\,s). uimi+vij=imj=1,(i=1,2,,s).

一次同余方程组的求解

先求出 v i ( i = 1 ,   2 ,   ⋯   ,   s ) v_i(i=1,\,2,\,\cdots,\,s) vi(i=1,2,,s),对 m i m_i mi ∏ j ≠ i m j \prod\limits_{j\neq i}m_j j=imj作辗转相除法,将二者的最大公因数 1 1 1表示成二者的倍数和,此时 ∏ j ≠ i m j \prod\limits_{j\neq i}m_j j=imj的倍数为 v i v_i vi

例题求解

下面对上面的士兵人数问题进行求解。

首先计算 3 3 3 5 × 7 = 35 5\times7=35 5×7=35的最大公因数,作辗转相除法得

35 = 11 × 3 + 2 , 3 = 1 × 2 + 1 , 35=11\times3+2,\quad3=1\times2+1, 35=11×3+2,3=1×2+1,

所以

1 = 3 − 1 × 2 = 3 − 1 × ( 35 − 11 × 3 ) = 12 × 3 + ( − 1 ) × 35 1=3-1\times2=3-1\times(35-11\times3)=12\times3+(-1)\times35 1=31×2=31×(3511×3)=12×3+(1)×35

得到 v 1 = − 1 v_1=-1 v1=1;

以此类推,分别得到 v 2 = 1 ,   v 3 = 1 v_2=1,\,v_3=1 v2=1,v3=1

所以,得到此方程组的全部解是
d = c + m 1 m 2 m 3 k = 2 × ( − 1 ) × 35 + 4 × 1 × 21 + 2 × 1 × 15 + 3 × 5 × 7 k = 44 + 105 k , ( k ∈ Z ) \begin{aligned} d=&c+m_1m_2m_3k\\ =&2\times(-1)\times35+4\times1\times21+2\times1\times15+3\times5\times7k\\ =&44+105k,\quad(k\in\mathbb{Z}) \end{aligned} d===c+m1m2m3k2×(1)×35+4×1×21+2×1×15+3×5×7k44+105k,(kZ)

由于一个连有一百多名士兵,所以取 k = 1 k=1 k=1,得到该连有 149 149 149名士兵。

补充

定理中的条件" m 1 ,   m 2 ,   ⋯   ,   m s m_1,\,m_2,\,\cdots,\,m_s m1,m2,,ms两两互素的"是必要的,整个定理的推导都是围绕互素这个条件展开,所以如果没有这个条件,方程组可能没有解。

你可能感兴趣的:(Algebra)