中国剩余定理即孙子定理的五种解法
加深一下理解,找了點純數學的資料(老者善學,尤老驥伏櫪,況乎我也):
“中國剩余定理”是公元5-6世紀、我國南北朝時期的一部著名算術著作《孫子算經》中的一個“物不知數”的解法問題:今有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二。問物幾何?答曰:二十三。
《孫子算經》中雖然也有計算方法的敘述,如術曰:「三三數之剩二,置一百四十,五五數之剩三,置六十三,七七數之剩二,置三十,并之,得二百三十三,以二百一十減之, 即得。凡三三數之剩一,則置七十,五五數之剩一,則置二十一,七七數之剩一,則置十五,即得。」但也僅僅知道140+63+30=233、 233-210=23,得物數23。至于接著說的剩一、置70、置21、置15,應該是說140=70*2、63=21*3、30=15*2的來源,而 2、3、2又正是剩余數、210又正是除數3、5、7的最小公倍數的2倍。綜合之,解的算式為70*2+21*3+15*2-2*3*5*7=23。雖然 如此,但仍不知為什么要這么算,還有, 70、21、15是怎樣來的?等等,如讀天書。如果換一個題目你能算嗎?連照搬都沒法搬。
??? 這個問題,過了八、九百年,到了宋代,才有秦九韶在《算書九章》中給以解答。但現代人讀古代數書,正如讀古代醫書一樣,絕大多數是丈二和尚模不著頭了。
? “中國剩余定理”的現代數學提法是,解一元一次同余式方程組:
X≡2? (mod 3)
X≡3? (mod 5)?
X≡2? (mod 7)
??? 初等數論中有解法,得X最小值為23,通解為X=23 + 105K。但因為原理很難理解,所以也只能按公式規定的步驟與方法,依樣畫葫蘆的計算罷了。時間一長也就忘光了。由此可見,“中國剩余定理”的理論及計算方法,還達不到普知的地步,不像一元二次方程的公式,初中生都知道公式怎樣來的,怎樣應用的。
??? 若要問我:你對“中國剩余定理”的態度是怎樣的呢?回答只有兩個字:“敬畏”。
?
??? 其實“中國剩余定理”,就是解一組帶余除法的不定方程:
X÷3=A…2
X÷5=B…3
X÷7=C…2,
??若避開難點,換個角度看,那么解這組方程,不一定非用“同余式方程組”的解法。就我所知,有五個方法:
一、枚舉法
二、解不定方程法
三、逐級滿足法
四、化為相同除數的同余式法、
五、才用到典經的、不同除數的同余式組解法
??? 現將陳景潤所著《初等數論Ⅰ》中的一個習題為例,分而習之。
試解
X≡2 ?(mod? 7 )
X≡5? (mod? 9 )
X≡1? (mod? 5 )
?
????????????????????????????????????? 一 枚舉法
?
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+315K
?
?????????????????????????????????????????????? 三? 逐級滿足法
?
??? 這個方法的基本思路是:先解算出合符第一個方程的X1。再解算出合符第一、第二個方程的X2,令X2=X1+P1。關鍵是P1要保持第一個方程中的倍數要求,又要合符第二個方程中的剩余要求。再解算出合符第一、第二、第三個方程的X3,令X3=X2+P2,關鍵是P2要保持第一第二兩個方程中的倍數要求,又要合符第三個方程中的剩余要求。這樣逐級解算,滿足全部條件。
??? 這使我想起老本行測量,好比測量平差的分組平差。只是測量分組平差時,要改化方程式的系數,比較麻煩,而這里僅要調整倍數與余數就行了。
??? X=7A+2
??? X=9B+5
??? X=5C+1
?? 先解第一方程? X=7A+2。最簡,X1=2。
?? 再解第二方程? X=9B+5 。令X2=X1+P1=2+P1。首先要求P1應是7的倍數7K,即P1只能=7、14、21、27…為什么呢,因為第一個方程X=7A+2中,有7A一項,所以X2最起碼應是X2==X1+P1=2+P1=2+7K,即應是 9、16、23、30、…中的一個,才能滿足第一個方程中的7倍數的要求。
?? 但僅僅這樣取P1,不一定滿足第二個方程中的剩余5的要求。為此,要統一考慮第一第二方程的總的剩余要求。要將X1=2看作是第一第二兩個方程的總的余數的一部份?,F在要求剩余為5,而前面已經有余數2了,所以P1除以9后,余數應為5-2=3,才能使總余數為5。這樣才滿足第二個方程中的剩余5的要求。
??? 總之,P1應是7的倍數、且P1÷9余3,這就是對P1的要求。
??? 用方程表示為:7K÷9=N…3,或(7K-3)/9=整數N。
將K=1、2、3、4…代入,K=1時,N=0.44,非整數,不合符要求。再往下算,得K=3時,N=2,整數了,合符要求。所以P1=7K =7*3=21。這樣,X2=X1+P1=2+21=23
??? 注:請回頭看看枚舉法,當A=2、B=3時,也得XA=XB=23,湊兩個方程容易。湊三個以上就難了。
?
??? 再解第三方程? X=5C+1,前已得X2=23。
??? 令X3=X2+P2=23+ P2。首先要求P2應是7*9=63的倍數63K,即P2只能=63、126、189…為什么呢,因為第一第二方程中有7A、9B,63是它們的最小公倍數。
?? 同樣,P2不一定滿足第三個方程中的剩余1的要求。為此,要統一考慮第一第二第三方程的總的剩余要求。要將X2=23看作是第一第二第三方程的總的余數的一部份。現在要求剩余1,而前面已經有余數23了,所以P2除以5后,余數應為1-23=-22,這樣才滿足第三個方程中的剩余1的要求。但余數=-22不是很怪嗎?實際上不怪,因為在數論中,不管除數的大小,可以把除數歸入余數之中的。例如83÷5=16…3,可以表示為 83÷5=15…8,也可以表示為 83÷5=21…… -22,它們用同余表示為 83 ≡3 (mod? 5 ) 、83 ≡8 (mod 5 ) 、83 ≡-22 (mod? 5 ),是相同的?,F在第三式中除數是5,現要求余數為-22,便可以改化為5*5-22=25-22=3,即余3。
??? 這樣,P2應是63的倍數、且P1÷5余3,這就是對P2的要求。
??? 用方程表示為:63K÷5=N…3,或(63K-3)/5=整數N。
?? 將K=1、2、3、4…代入,可得K=1時,N=12,合符要求。所以P2=63*1=63,即X3=X2+P2=23+63=86,這是最小解。通解為X=86+315K
?
?????????????????????????????????? 四 化為相同除數的同余式法
?
???????? ?X≡2? (mod? 7 )
????????? X≡5? (mod? 9 )
????????? X≡1? (mod? 5 )
?? 這三個同余式,除數不同,分別為7、9、5,為了能利用同余式的和差特性,簡化計算,先設法使它們的除數相同,為此:
X≡2? (mod? 7 )兩邊都乘9*5,得X*45≡2*45? (mod 7*45 )? →45 X≡90?? (mod 315 ) …(1)
X≡5? (mod? 9 ) 兩邊都乘7*5,得X*35≡5*35? (mod 9*35 )? →35 X≡175? (mod 315 ) …(2)
X≡1? (mod? 5 ) 兩邊都乘7*9,得X*63≡1*63? (mod 9*63 )? →63 X≡ 63? (mod 315 ) …(3)
??? 根據同余式的加減性質,(1)- (2)得:
(45-35) X≡(90-175)? (mod 315 ) ??→10 X≡-85? (mod 315 ) ?→10 X≡230? (mod 315 )
而10 X≡230? (mod 315 )就意味著(10X-230)÷315=商N (整數),由此解得X=86、N=2,合符整數要求,所以 X≡86? (mod 315 )
??? 驗算:X≡86? (mod 315 ) ,兩邊都乘63,得 63 *X≡86*63? (mod 315 )
???? →63 X≡5418? (mod 315 ) ?→63 X≡63? (mod 315 )正與(3)相同。沒有算錯。
??? 所以? X=86是最小解。通解為? X=86+315K或X≡86? (mod 315 )
?
?????????????????????????? 五 典經的、不同除數的同余式組解法
?
X≡R1? (mod? m1 ) ????X≡2? (mod? 7 )
X≡R2? (mod? m2) ?????X≡5? (mod? 9 )
X≡R3? (mod? m3) ?????X≡1? (mod? 5 )
??? 名詞注釋及計算步驟:
1? 余數R:、R1=2、R2=5、R3=1
2? 模,亦即除數m:例中m1=7、m2=9、m3=5
3? 模的最小公倍數G:G=m1*m2*m3,例中M=7*9*5=315
4? 衍數(局部公倍數)y:Y1=m2m3、Y2=m1m3,Y3=m1m2,例中Y1=9*5=45、Y2=7*5=35、Y3=7*9=63
5? 乘率C:這是解算中國剩余定理的關鍵,而計算“乘率”的方法,是秦九韶在《數書九章》一書中首次提出? 的,稱之為“大衍求一術”?!扒笠弧本褪鞘?衍數*乘率)除以模(除數),而余數為1。即:
衍數Y*乘率C≡1? (mod? m),乘率C可以經過反算而得到。例中Y1C1≡1? (mod? 7 )、
?Y2C2≡1? (mod? 9 ) 、Y3C3≡1? (mod? 5 )。
??? 計算C1方法。由Y1C1≡1? (mod? 7 ), →45C1≡1? (mod? 7 )? →(45C1-1)? /? 7=整數N ,得C1=5。因為45*5=225,225-1=224,224÷7=32,32是整數,合符要求。C2、C3之計算也相仿。乘率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 |
?
?
??
?
?
?
6? 最終結果,X≡R1Y1C 1+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 |
?
?
?
?
?
?
?
X≡1976 ?(mod 315) 。1976 除去315的6倍后,剩下86,最終,
X≡86 ?(mod 315)
?
????????????????????????? 六 用分組的逐級滿足法解“韓信點兵”
?
??? 陳景潤 著《初等數論Ⅰ》例:
??? 韓信點兵:有兵一隊,若列成5行縱隊,則末行1人。成6行縱隊,則末行5人,成7行縱隊,則末行4人,成11行縱隊,則末行10人。求兵數。
??? 設:X是兵數,依題意有:
X≡1 ?(mod 5)
X≡5 ?(mod 6)
X≡4 ?(mod 7)
X≡10 (mod11)
??? 現將四式分為兩大組,對每組的兩個式,都用逐級滿足法,分別求出兩個X。再合并求出最終X。這是我獨自想出的方法,正確性、簡便性如何,請一試驗證之。
第一組:
X≡1 ?(mod 5)? →?????? X1=1
X≡5 ?(mod 6)? →????? X2= X1+P1=1+P1? →P1=5K。
??? 關于余數,前已有1,現要求余5,則應余5-1=4,所以P1又應滿足(5K-4)/6=整數N的要求。經電子表格湊算,當K=2時,N=1,行。這樣,X2=1+5K=1+5*2=11,此兩式最小公倍數5*6=30,所以 有X≡11 ?(mod?30) …(A)
?
第二組:
X≡4 ?(mod 7)? →?????? X3=4
X≡10 ?(mod 11)? →???? X4=X3+P3=4+P3? →P3=7K。
??? 關于余數,前已有4,現要求余10,則應余10-4=6,所以P3又應滿足(7K-6)/11=整數N的要求。經電子表格湊算,當K=4時,N=2,行。這樣,X4=4+7K=4+7*4=32,此兩式最小公倍數7*11=77,所以 有
X≡32 ?(mod? 77) ……(B)
?
經分批解算,得到兩個新的同余式:
X≡11 ?(mod? 30) ……(A)
X≡32 ?(mod? 77) ……(B)
??? 再用逐級滿足法解。XA=11、XB=XA+PA=11+PA、PA=30K。
??? 關于余數,前已有11,現要求余32,則應余32-11=21,所以PA又應滿足(30K-21)/32=整數N的要求。經電子表格湊算,當K=70時,N=27,行。這樣,XB=11+30K=11+30*70=2111,此兩式最小公倍數30*77=2310,所以有:
X≡2111 ?(mod 2310) ,即X=2111+2310K
?
??? 現再用第四節“化為相同除數的同余式法”來解算這兩個新的同余式。
X≡11 ?(mod? 30) ……(A),乘77,得 77X≡847 ?(mod? 2310)……(1)
X≡32 ?(mod? 77) ……(B),乘30,得 30X≡960 ?(mod? 2310)……(2)
(1)- (2) ,得 47X≡-113 ?(mod? 2310) ……(3),相當于要求(47X+113)/2310=N整數。由電子表格幫忙,算得X=2111,此時N=43,合符要求。所以也得到? X=2111+2310K。
??? 真是路路通啊,有收獲。
?
?????????????????????????????????????? 七 ??寫后感
?
??? 2013年的國慶過得很忙,甚至還起了一個早床。感謝我的老伴,以她的勤勞與寬容,給了我閑暇與自由,使我能夠安逸地做做算術、寫寫文章,自得其樂,有時間消磨我的時光。
??? 我仰望深邃的數學天空,深感自己的渺小。我淺嘗一滴數學的清泉,來潤濕一下我干枯的靈感。
?原文:http://blog.sina.com.cn/s/blog_a6f9a3b60101favb.html
總結
以上是生活随笔為你收集整理的中国剩余定理即孙子定理的五种解法的全部內容,希望文章能夠幫你解決所遇到的問題。