中国剩余定理的五种解法

原文地址:http://blog.sina.com.cn/s/blog_a6f9a3b60101favb.html

一、枚举法

二、解不定方程法

三、逐级满足法

四、化为相同除数的同余式法、

五、才用到典经的、不同除数的同余式组解法

    现将陈景润所著《初等数论Ⅰ》中的一个习题为例,用五种方法解算,可以对比。

试解下列同余方程

X2  (mod  7 )

 X5  (mod  9 )

X1  (mod  5 )      X

 

                                      一 枚举法

 

X≡2  (mod  7 )           X÷7=A…2        X=7A+2

X≡5  (mod  9 )   相当于  X÷9=B…5   →   X=9B+5

X≡1  (mod  5 )           X÷5=C…1        X=5C+1

    枚举法就是按A=0、1、2、3、4…    B=0、1、2、3、4…   C=0、1、2、3、4…

代入各式,计算各式的X,当三个X相同时,就是一个解。

   A、B、C    0    1    2    3    4 …  9    10    11    12 …   16   17   18… 

   XA          2    9    16   23   30…  65   72    79    86…    

     XB        5   14    23   32   41 … 86 …

       XC      1    6    11   16   21 … 46   51    56    61 …    81   86  … 

   即,当A=12、B=9、C=17时,X 都等于86。所以最小 X=86。由于7、9、5的最小公倍数是315,所以,通解   X=86+315K  (K=0、1、2、3、…)

    枚举法就是凑,很‘笨’,但也最直观。适合小学生学习。也可用电子表格计算,那太快捷了。

 

                                       二 解不定方程法

X=7A+2

X=9B+5     →9B+5=7A+2    →9B=7A+2-5=7A-3    →B=(7A-3)/9

X=5C+1     →5C+1=7A+2   →5C=7A+2-1=7A+1    →C=(7A+1)/5

    由B=(7A-3)/9,算得:当A=3时,B=2,但A=3时,C=(7A+)/5=4.4。由于A、B、C只能是整数。所以 3、2、4.4这一组,不符合要求,要重算A。又由于B=(7A-3)/9的分母是9,所以下一个A,只能在3的基础上,增加一个9的倍数,所以A只能取12、21、30、39…有了A,再算B、C,当A、B、C全是整数时,才合格。结果如下:

A       B        C

3       2        4.4

12      9       17

21     16       29.6

可见,只能取A=12 、B=9  、C=17 , 代入原式:

X=7A+2=7*12+2=86

X=9B+5=9*9+5=86

X=5C+1=5*17+1=86

得 X=86、通解为X=86+315KX=86、通解为X=86+315K。实际上,这仍然是枚举法,只是枚举个数减少一些而已。


   逐级满足法

 

这个方法的基本思路是:先解算出合符第一个方程的X1。再解算出合符第一、第二个方程的X2,令X2=X1+P1。关键是P1要保持第一个方程中的倍数要求,又要合符第二个方程中的剩余要求。再解算出合符第一、第二、第三个方程的X3,令X3=X2+P2,关键是P2要保持第一第二两个方程中的倍数要求,又要合符第三个方程中的剩余要求。这样逐级解算,满足全部条件。

P要同时考虑两个方程的倍数关系如7A9B,又要考虑两个余数关系,如余2、余5,方程数一多,处理时要拐几个弯,方法不易理解。

最近,我在作《数论—余数习题集》时,对“逐级满足法”作了改进。把第一个方程的通解,直接作为第二个方程的初值,不作任何转弯,就同时解决了两个方程之间的相关关系及余数关系,变得容易理解,容易操作、便于列式。这可以说是我的又一个心得罢。

仍按原例: X除以72、除以95、除以51,求最小X

答:最小X=86  通解 X =86 315 N ( N=123  )

 已知:

X2  (mod  7 )           X÷7=A2         X=7A2

X5  (mod  9 )   相当于  X÷9=B5       X=9B5

X1  (mod  5 )           X÷5=C1         X=5C1

ABC都是整数,可用K统一表示,且不论其具体数值。

解算步骤:

1 先解第一个方程X÷72的通解X1。一般都很容易,即:

通解X1=余数+除数的倍数,例中X1=27A 。其中余数就是最小解X0=2,加上7的最小公倍数的A倍,就是通解X1=27A 

X1是一个数列,其中总有一个数能满足所有方程,关键在于A是多少,又怎样定?A怎样定呢?现在不能定。因为要考虑到它能满足第二个方程,所以到那时才能定下来。

 

2、第二个方程。X÷95,此时的X首先应满足本方程要求: (X5)÷9 = K  (K是整数)。但同时又要满足第一个方程,既然X1可以满足所有方程,所以就干脆用第一方程的通解X1代替第二方程的未知数X ,即用(X1)取代X。即应满足 (X15)÷9 = K,才顾及了两式。

注意,(X15)÷9 =K这种形式的方程,是有规律的,即:

(第一方程的通解X1=27A    第二方程的余数5 )÷第二方程的除数9=整数K

且以下各方程也都是这样的规律,亦即:

( 上一个方程的通解  本方程的余数 )÷本方程的除数   整数K

现在有了 (27A5)÷9 =K ,就整理为(7A3)÷9 = K。这时两个余数就自动合并了。

       解此 (7A3)÷9 = K方程,便得A=3  K2

于是  X1=27A=27×3=23。此时,就把X123作为第二个方程的最小解,转为X2,即X223。再加上79的最小公倍数7×9=63的倍数,得通解X22363M。这个X2,既满足第一个方程又满足第二个方程。

X2也是一个数列,其中总有一个数,能满足所有方程,所以就是下一个方程的未知数初值了。关键在于M是多少。M怎样定呢?现在不能定。要考虑到它能满足第三个方程。到那时才能定下来。

至此,得到一个同余式  X223  (mod  63 ),实际上它是

X2  (mod  7 )         

X5  (mod  9 )   二个同余式的共同解。

 

至于用什么方法来解  (7A3)÷9 = K  这个二元一次不定方程呢?(7A3)÷9 = K也就是7A9K = 3在陈景润所著《初等数论Ⅰ》中,有一个手算方法,先用“辗转相除法”得到各次余数,直到余数为 ,再反求出满足余数“ 1 时的XK的新系数,再通过“同余式”的转换,转换成己知余数(如本例的3),才得到最终的X的系数A。整个过程步骤多。反求XK的新系数时、转换成己知余数时,都颇费工夫,我见了生畏。还不如老老实实的试算、凑数。

(7A3)÷9 = K   AK的整数解,

         列表凑罢:

A     7A     (7A3)     K (7A3)÷9

           0      0       3          0.33

           1      7         4            0.44                 

           3     21        18            2        好了,K是整数了

           4       不必算了。

A3K2 。其实K仅起检验作用,是整数就行了,没有其他用处。

解二元一次不定方程最好的方法,当然是编个电脑程序。我已经编就了,请用吧

3、第三个方程。X÷51,此时X首先应满足本方程要求: (X1)÷5 = K,又要满足第一、第二个方程。既然X2可以满足所有方程,所以就干脆用第二方程的通解X2代替第三方程的未知数X  ,即用(X2)取代X。即应满足:

(X21)÷5 = (2363M 1)÷5=K,→ (63M22)÷5 = K。才顾及了三个方程。

解此元不定方程 M=1  K17。把M代入X2

于是  X2=2363M=2363×1=86,就把X286作为第三个方程的最小解,转为X3

X386。再加上635的最小公倍数63×5=315的倍数,得通解

X386315P(P=123  )

验算  86÷7 =12    2

       86÷9 = 9    5

86÷5=17    1

*   *   *   *   *

“逐级满足法”解法有规律了,容易操作了。但也有两点麻烦

1组成形如 (AX±B)÷CK的不定方程,要一个个顺序进行,虽有规律,但还是比较麻烦。

2、解算(AX±B)÷CK方程,求待定量XK,无论用手算,或是电子表格算,要解(N1)次。也很烦人,特别是大数相除更麻烦。

为了加快计算,我编了一个VB程序,不用烦心,输入完数据,↙,就出结果了。

上述算题:

输入方程个数N = 3  

输入各方程的除数与余数  7   2   9   5   5   1  

结果为:

通解 X =86 315 N ( N=123  )

 

还有一例:我曾靠电子表格算了一天,才得结果的,现在包括输入在内,仅15秒就搞定。

输入方程个数N = 6  

输入各方程的除数与余数  3  2  5  3  7  2  11  9  13  7  4  3  

结果为:

通解 X =20183 60060N ( N=123  )


 化为相同除数

 

X2  (mod  7 )

X5  (mod  9 )

X1  (mod  5 )

这三个同余式,除数不同,分别为795,为了能利用同余式的和差特性,简化计算,先设法使它们的除数相同,为此:

X2  (mod  7 )两边都乘9*5,得X*452*45  (mod 7*45 )  45 X90   (mod 315 ) (1)

X5  (mod  9 ) 两边都乘7*5,得X*355*35  (mod 9*35 )  35 X175  (mod 315 ) (2)

X1  (mod  5 ) 两边都乘7*9,得X*631*63  (mod 9*63 )  63 X 63  (mod 315 ) (3)

                           (1)(2)(3) (4)     143 X328   (mod 315 ) 4)  

根据同余式的加减性质,(1)(2)(3)得:

143 X328   (mod 315 )   143 X13  (mod 315 ),化为带余除式为:

143 X÷315=K 13  亦即   143X13=315 K ,有(143X13)÷315K(整数)

(143X13)÷315K(整数)用通式表示为  (AXB)÷SK

  解得  X=86K=38  (实际上不用它,在此仅确认它是整数就行了)

通解为    X86+315 N  ( N  123  )

   X86  (mod 315 )

 

这一种算法,在所有五种算法中,我认为是最简洁、工作量最小的算法。因为不管方程有多少个,它解算形如(AXB)÷S=K这种不定方程,仅解一次而已。而其他方法要解多次。同时,这种算法也容易理解,算法单纯。

 

典经的、“大衍求一术”解法

 

XR1  (mod  m1 )     X2  (mod  7 )

XR2  (mod  m2)      X5  (mod  9 )

XR3  (mod  m3)      X1  (mod  5 )

名词注释及计算步骤:

 余数R:、R1=2R2=5R3=1

 模,亦即除数m:例中m1=7m2=9m3=5

 模的最小公倍数GG=m1*m2*m3,例中M=7*9*5=315

 衍数(局部公倍数)yY1=m2m3Y2=m1m3Y3=m1m2,例中Y1=9*5=45Y2=7*5=35Y3=7*9=63

 乘率C:这是解算中国剩余定理的关键,而计算“乘率”的方法,是秦九韶在《数书九章》一书中首次提出的,称之为“大衍求一术”。“求一”就是使(衍数*乘率)除以模(除数),而余数为1。即:

衍数Y*乘率C1  (mod  m),乘率C可以经过反算而得到。例中Y1C11  (mod  7 )

 Y2C21  (mod  9 ) Y3C31  (mod  5 )

 

计算C1方法。由Y1C11  (mod  7 ) 45C11  (mod  7 )  (45C11)  /  7=整数N ,得C1=5。因为45*5=2252251=224224÷7=3232是整数,合符要求。C2C3之计算也相仿。乘率C之计算见下表:

 

同余式 i

 衍数Y

乘率C

1

m

  检验  (Y*C-1)/m  = 整数

   1

  45

  5

 1

 7

(45*C-1)/7 =N   (45*5-1)/7 =  32

   2

  35

  8

 1

 9

(35*C-1)/9 =N  (35*8-1)/9 =  31

   3

  63

  2

 1

 5

(63*C-1)/5 =N  (63*2-1)/5 =  25






最终结果,XR1Y11+R2Y2C2+R3Y3C3(mod G)

X≡Σ余数*衍数*乘率 (mod G),见下表计算:

i

余数R

衍数Y

乘率C

R*Y*C

1

2

45

5

 450

2

5

35

8

1400

3

1

63

2

 126

 

 

 

Σ

1976

 

 

 

 

 

  

X1976  (mod 315)

1976 除去3156倍后,剩下86,最终,X86  (mod 315)

“大衍求一术”的关键与难点,是如何解“衍数Y*乘率C1  (mod  m),得乘率C。也就是解算方程(Y*C-1)/m =N 

2015-11-21补充:

XR1  (mod  m1 )  X2  (mod  7 )  ×5×9    45 X90  (mod  315 )

XR2  (mod  m2)    X5  (mod  9 )  ×7×5    35 X175  (mod  315)

XR3  (mod  m3)    X1  (mod  5 )  ×7×9    63 X63  (mod  315 )

 

   45 C11  (mod  7 )     (45 C1 1 ) ÷7 =整数  C1 5

   35 C21  (mod  9)      (35 C2 1 ) ÷9 =整数  C2 8

   63 C31  (mod  5 )     (63 C3 1 ) ÷5 =整数  C3 2

 

    

1           综合上述五种解法,归根到底,关键点,也是难点,就是都要解“(AXB)÷C= K”这种类型不定方程。而解这种不定方程的方法,既没有公式又没有窍门,归根到底还是一个“凑”字了。其中“枚举法”是小学生都懂的凑数法。因此可以说,中国剩余定理其实并不神秘,就是一个如何凑数的问题。

 2      五种解法中我认为“化为相同除数法”最简易、工作量最小。因为:

第一,它要使除数相同,方法最简单、统一,初中二年级学生都会。

第二,它解算不定方程(AXB)÷C= K 只解一次,也即只“凑”一次。而“逐级满足法”和“大衍求一术”,则要“凑”多次 (N次,即方程的个数)。方程个数越多,“化为相同除数法”就越显得省力。我认为应该宣传、普及一下通俗易懂的“化为相同除数”。               

3  至于说到“大衍求一术”的同余式“衍数Y*乘率C1  (mod  m)”是怎样来的,又为什么成为解题的关键,在陈景润所著《初等数论Ⅰ》1978年版85页上有理论推证。这应该是一个现代数学的推证,而不是在论证秦九韶的理论就是这样的。也就是说,这是殊途同归。至于秦九韶到底是怎样想的,或许他有更容易为常人所理解的机理,那就不得而知了,于是我们钦佩古代数学家的智慧。我们钦佩古代数学家的智慧,但不一定非要走他的路,固守他的方法。有了更好的方法,应该学习推广。至于以后是不是有更好的解法,那谁又知道呢。

你可能感兴趣的:(离散数学)