1. 程式人生 > >中國剩餘定理的五種解法

中國剩餘定理的五種解法

原文地址: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

相關推薦

中國剩餘定理解法

原文地址:http://blog.sina.com.cn/s/blog_a6f9a3b60101favb.html 一、列舉法 二、解不定方程法 三、逐級滿足法 四、化為相同除數的同餘式法、 五、才用到典經的、不同除數的同餘式組解法     現將陳

算法題的解法

bubuko 元素 頭腦風暴 png bsp 分享 ima 分享圖片 .com 方法一:舉例法 先列舉一些具體的例子,看能否發現其中的一般規則。 示例:給定一個具體時間,計算時針與分針之間的角度。 方法二:模式匹配法 將現有問題與相似問題作類比,看看內否通過修改相關問題的

poj 2891 Strange Way to Express Integers 中國剩餘定理模板

Description   Elina is reading a book written by Rujia Liu, which introduces a strange way to express non-negative integers. The way is descr

Poj 1006 Biorhythms 中國剩餘定理

Description Some people believe that there are three cycles in a person's life that start the day he or she is born. These three cycles are the phys

Hdu 1573 X問題 中國剩餘定理模板

  Problem Description 求在小於等於N的正整數中有多少個X滿足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], …, X mod a[i] = b[i], … (0 < a[i] <=

51nod 1079 中國剩餘定理 模板

一個正整數K,給出K Mod 一些質數的結果,求符合條件的最小的K。例如,K % 2 = 1, K % 3 = 2, K % 5 = 3。符合條件的最小的K = 23。 Input 第1行:1個數N表示後面輸入的質數及模的數量。(2 <= N <=&

Hdu 3575 Hello Kiki 中國剩餘定理模板

Problem Description One day I was shopping in the supermarket. There was a cashier counting coins seriously when a little kid running and singing "門

中國剩餘定理poj1006

題意就是給出23,28,33三個週期,輸入三個餘數和起始時間,問下一個共同週期。 中國剩餘定理模板題 中國剩餘定理: mi=n1*n2*...*n(i-1)*n(i+1)*...*ni ci=mi ( mi^-1 mod ni ) a≡(a1c1+a2c2+...+akck)(mod n)

擴充套件歐幾里得及中國剩餘定理

Exgcd 擴充套件歐幾里得 void exgcd(int a,int b,int &x,int &y){ if(!b){x=1,y=0;return;} exgcd(b,a%b,x,y);b-=y*(a/b); } 對於 \(gcd(a,b)=g\) ,\(a\time

學習筆記 - 中國剩餘定理&擴充套件中國剩餘定理

中國剩餘定理&擴充套件中國剩餘定理 NOIP考完回機房填坑    ◌ 中國剩餘定理 處理一類相較擴充套件中國剩餘定理更特殊的問題:   在這裡要求 對於任意i,j(i≠j),gcd(mi,mj)=1 (就是互素) 不互素的話就只能用擴充套件

poj1006 Biorhythms【中國剩餘定理/暴力】

Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14507

HDU 3430 Shuffling(置換群+中國剩餘定理)

Shuffling Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 548 &n

bzoj 1573 X問題【擴充套件中國剩餘定理

擴充套件中國剩餘定理的板子,合併完之後算一下範圍內能取幾個值即可(記得去掉0) #include<iostream> #include<cstdio> #include<cmath> using namespace std; const int N=15; int T,n

FJNU2018低程A 逃跑路線(Lucas + 中國剩餘定理 + LGV定理)題解

題目描述 n個人在w*h的監獄裡面想要逃跑,已知他們的同夥在座標(bi,h)接應他們,他們現在被關在(ai,1)現在他們必須要到同夥那裡才有逃出去的機會,這n個人又很蠢只會從(x,y)->(x+1,y),(x,y+1)並且這他們走過的路徑不能相交如果相交第一個經過後就會有第二個人經過時候就會有一名

中國剩餘定理----51nod1079

模板題  連結51nod1079 這道題是中國剩餘定理的模板題,但是這道題範圍不大,還可以暴力求解,只是複雜度高些。 下面說下孫子定理(中國剩餘定理) 定理詳述參見百度百科 求法 要求出的是----x     m陣列中 存的是x與其取餘的數 &

中國剩餘定理求解

最近在學習網路安全課程,其中涉及的數論確定令人難以琢磨,下面會對相關內容整理成學習筆記~參考來源:https://blog.csdn.net/bobodem/article/details/49426815 典經的、不同除數的同餘式組解法 X≡R1 (mod m1 ) eg:X≡

【數學專題】(一) 中國剩餘定理

中國剩餘定理 ,求的是模線性方程組的通解,如圖1所示,其中(mi, ai)都是已知量,x是未知量。需要求的就是x,讓它滿足以下n個等式: 圖1

【EXCRT模板】POJ2891/LuoGu4777Strange Way to Express Integers拓展中國剩餘定理

這道題需要exgcd的基礎 POJ的題幹描述十分噁心 Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 21217 A

[模板]中國剩餘定理/擴充套件中國剩餘定理

中國剩餘定理(crt) 求解同餘方程組$\{x=a_i (\mod b_i)$,要求$b_i$互質 有公式$x = \sum{a_iM_it_i} , lcm是b的最小公倍數, M_i=lcm/b_i , t_i=M_i^{-1}(\mod b_i)$ 因為感覺被excrt完爆所以看看得了233 擴充

中國剩餘定理學習

 中國剩餘定理   在《孫子算經》中有這樣一個問題:“今有物不知其數,三三數之剩二(除以3餘2),五五數之剩三(除以5餘3),七七數之剩二(除以7餘2),問物幾何?”這個問題稱為“孫子問題”,該問題的一般解法國際上稱為“中國剩餘定理”。具體解法分三步: 找出三個數:從3