今有物,不知其數,三三數之,剩二;五五數之,剩三;七七數之,剩二。問物幾何 ——《孫子算經》ide
答爲「23」。也就是求同餘式組 x≡2 (mod3),x≡3 (mod5 ),x≡2 (mod7)的正整數解。spa
不難看出,題中3,5,7分別是互質的。具體解法是這樣的code
一、找出三個數:從3和5的公倍數中找出被7除餘1的最小數15,從3和7的公倍數中找出被5除餘1 的最小數21,最後從5和7的公倍數中找出除3餘1的最小數70。
二、用15乘以2(2爲最終結果除以7的餘數),用21乘以3(3爲最終結果除以5的餘數),同理,用70乘以2(2爲最終結果除以3的餘數),而後把三個乘積相加15∗2+21∗3+70∗2獲得和233。
三、用233除以三、五、7的最小公倍數105,獲得餘數23,這個餘數23就是符合條件的最小數。blog
換成公式:get
x ≡2(mod 3)
x ≡3(mod 5)
x ≡2(mod 7)
則進一步得
lcm(5,7)·k≡1(mod 3) →70 ≡1(mod 3)
lcm(3,7)·k≡1(mod 5) →21 ≡1(mod 5)
lcm(3,5)·k≡1(mod 7) →15 ≡1(mod 7)
因此
70×2+21×3+15×2 ≡ x (mod(lcm(3,5,7)))
233 ≡x (mod 105)
獲得x=23+105k(k ∈Z) 。這裏x的取值有無數多個,當k==0時最小爲23,知足題意。io
--同餘的解法: 因M除以3和7都餘2,有等差數列2+21N知足除以3和7都餘2,event
在2+21N數列 取5項:2,23,44,65,86,得23/5餘3,因3*5*7=105,即23+105N數列的數都知足這些條件。最小的就是23class
中國剩餘定理又稱孫子定理,它的證實這樣的cli
由於(mi,mj)=1,i!=j, (這裏mi,mj是互素的,如上題中2,3,7),則 (Mi, mi)=1,對每一個Mi,都存在Ni,使得
MiNi ≡1 (mod mi)
又m=mi Mi ,故mj | Mi , i!=j,即
MiNi≡0 (mod mj)
則M1 N1b1+ M2 N2b2+…+ Mk Nk bk≡ bi (mod mi).所以
x≡M1 N1b1+ M2 N2b2+…+ Mk Nk bk (mod m)是同餘方程的整數解擴展
惟一性證實:
若是y也是上述同餘方程的解,則知足
x≡y(mod m1); x≡y(mod m2); …; x≡y(mod mk)
即m1 |(x-y), m2 |(x-y),…, mk |(x-y).因此
m|(x-y)
即x≡y(mod m). 即證方程在模m條件下有惟一解。
證實可能有點難理解,能夠看看例題幫助理解:
韓信點兵
韓信帶貳仟伍佰士兵出去打仗,回營後,劉邦問士兵人數。韓信讓士兵先列成五行縱隊,末行一人;列成六行縱隊,末行五人;列成七行縱隊,末行四人;列成十一行縱隊,末行十人。韓信馬上回答二千一百一十一人。劉邦驚爲天人!
看過題目後就知道該如何求解了。即解一次同餘方程組:(1)x ≡1(mod5); x ≡5(mod6); x ≡4(mod7); x ≡10(mod11)
(2)用孫子定理,
m1 =5, m2 =6, m3=7, m4 =11;這些是對應的除數,
b1 =1, b2 =5, b3=4, b4 =10;這些是對應的商,
m=5*6*7*11=2310;全部除數的乘積。
所以對應的Mi爲M1 =462(2310/5),M2=385(2310/6),M3=330(2310/7)。M4=210(2310/11)
對應的Ni(逆元)爲N1=3,N2=1,N3=1,N4=1
因此 x ≡ 462*3*1+ 385*1*5+ 330*1*4+210*1*10 ≡6731 ≡2111(mod2310) ,最小爲2111。
這裏有一個求解思路圖:
1 int china (int *a ,int *m, int n) 2 { 3 int M=1,ans=0,mi,i,x,y; 4 for(i=0;i<n;i++) 5 M*=m[i]; //M=m1*m2*m3...*mn 6 for(i=0;i<n;i++) 7 { 8 mi=M/m[i]; //Mi=M/mi 9 exGcd(m[i],mi,x,y); //擴展歐幾里德 10 ans=(ans+mi*y*a[i])%M; 11 } 12 return (ans%M+M)%M; 13 }
題目連接:Biorhythms