孫子演算法總結
① 關於孫子問題的演算法C++ 求個能通過的演算法
這個題目就是孫子定理(中國剩餘定理)中的結論,是數論中的基礎定理之一。
對於
M=p1*b1+p2*b2+...+pn*bn
能滿足M除以a1的余數也是p1,M除以a2的余數也是p2……M除以an的余數也是pn。則
bimodai=1
bimodaj=0(i!=j)
這樣的解可以通過如下方式構造
C=a1*a2*...*an
ci=C/ai
bi=ti*ci且bimodai=1
這個構造的方法依賴於正整數a1,a2,...an是互質的,如果它們不是互質,不存在對於任意的N都成立的解。
程序如下:
#include<iostream>
#include<cmath>
#include<vector>
#include<algorithm>
usingnamespacestd;
intmain()
{
intN=0;
intTemp=0;
intB=1;
cin>>N;
if(N<=0||N>=11)
exit(1);
vector<int>pAn;
for(inti=0;i<N+1;i++)
{
cin>>Temp;
if(Temp>0&&Temp<=50)
pAn.push_back(Temp);
}
sort(pAn.begin(),pAn.end());
for(inti=0;pAn[i]<pAn[N-1]/2;i++)
{
for(intj=i+1;j<N;j++)
{
if(pAn[j]%pAn[i]==0)
{
cout<<"NO"<<endl;
return0;
}
}
}
for(inti=0;i<N;i++)
B*=pAn[i];
int*pBn=newint[N];
int*pCn=newint[N];
for(inti=0;i<N;i++)
{
pBn[i]=B/pAn[i];
pCn[i]=pBn[i];
}
for(inti=0;i<N;i++)
{
while(pBn[i]%pAn[i]!=1)
pBn[i]+=pCn[i];
}
for(inti=0;i<N;i++)
cout<<pBn[i]<<'';
return0;
}
② 《孫子算經》的主要成就
《孫子算經》
約成書於四、五世紀,作者生平和編寫年代都不清楚。現在傳本的《孫子算經》共三卷。卷上敘述算籌記數的縱橫相間制度和籌算乘除法則,卷中舉例說明籌算分數演算法和籌算開平方法。卷下第31題,可謂是後世「雞兔同籠」題的始祖,後來傳到日本,變成「鶴龜算」。書中是這樣敘述的:「今有雞兔同籠,上有三十五頭,下有九十四足,問雞兔各幾何?這四句話的意思是:有若干只雞兔同在一個籠子里,從上面數,有35個頭;從下面數,有94隻腳。求籠中各有幾只雞和兔? 具有重大意義的是卷下第26題:「今有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二,問物幾何?答曰:『二十三』」。《孫子算經》不但提供了答案,而且還給出了解法。南宋大數學家秦九韶則進一步開創了對一次同餘式理論的研究工作,推廣「物不知數」的問題。德國數學家高斯﹝K.F. Gauss.公元1777-1855年﹞於公元1801年出版的《算術探究》中明確地寫出了上述定理。公元1852年,英國基督教士偉烈亞士﹝Alexander Wylie公元1815-1887年﹞將《孫子算經》「物不知數」問題的解法傳到歐洲,公元1874年馬蒂生﹝L.Mathiesen﹞指出孫子的解法符合高斯的定理,從而在西方的數學史里將這一個定理稱為「中國的剩餘定理」﹝Chinese remainder theorem﹞。另外還有一道,曰:「巍巍古寺在山林,不知寺內幾多僧。三百六十四隻碗,看看用盡不差爭。三人共食一碗飯,四人共吃一碗羹。請問先生明算者,算來寺內幾多僧。」
成書於公元四世紀左右,共三卷.作者不祥,書中系統地記載了籌算記數制度和籌算乘除法則,是一部算術啟蒙書,書中記載了"雞兔同籠"問題,特別是"物不知數"問題,是我國古代數學著作首次出現的一次同餘式問題,成為後來馳名於世的"中國大衍求一術"的源頭.
③ 寫5條關於《孫子算經》中的題目及答案
《孫子算經》里的孫子問題
在我國古代數學名著《孫子算經》的下卷中,記載有這樣一個問題:「今有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二。問物幾何?」(答曰:二十三)這就是聞名於世的「孫子問題」。《孫子算經》中給出了它的一般解法:「術日:三三數之剩二,置一百四十;五五數之剩三,置六十三;七七數之剩二,置三十;並之,得二百三十三,以二百一十減之即得。凡三三數之剩一,則置七十;五五數之剩一,則置二十一;七七數之剩一,則置十五。一百六以上,以一百五減之,即得。」明朝數學家程大位在所著《演算法統宗》中把這一解法概括為四句歌訣:「三人同行七十稀,五樹梅花廿一枝,七子團圓正半月,除百零五便得知。」具體到本題的結果,由70×2+21×3+15×2—2×105=23得所求物為23個,一般地說,所求物個數是23+105n(n=0,1,2,3……)。它的解答要用到不定方程的知識或同餘的知識。
《孫子算經》對於「孫子問題」的解答暗示了一般途徑,由它作出的理論概括,被西方譽為「中國剩餘定理」。孫子問題的演算法還有其他一些名稱,如「鬼谷算」、「隔牆算」、「秦王暗點兵」和「韓信點兵」等。其中「韓信點兵」也指這樣的問題:有兵一隊,若列成五行縱隊,則末行一人;成六行縱隊,則末行五人;成七行縱隊,則末行四人;成十一行縱隊,則末行十人,求兵數。下面給出它的一個算術解法:(1)在6、7、11的公倍數中找一個被5除餘1的數,如3×462;(2)在5、7、11的公倍數中找一個被6除餘5的數,如5×385;(3)在5、6、11公倍數中找一個被7除餘4的數,如4~330;(4)在5、6、7的公倍數中找一個被ll除餘1O的數,如10×210;(5)3×462+5×385+4×330+lO×210=6731,則6731是滿足條件的一個數,它比5、6、7、11的最小公倍數2310大,若求滿足條件的最小正數,則應從6731中減去2310的兩倍,得211l,由此所求兵數的一般結果是2111+2310 n(n=0,1,2,……)。這種算術解法也適用於「孫子問題」。
《孫子算經》中的中國剩餘定理
最早提出並記敘這個數學問題的,是南北朝時期的數學《孫子算經》著作中的「物不知數」題目。這道「物不知數」的題目是這樣的:
「今有一些物不知其數量。如果三個三個地去數它,則最後還剩二個;如果五個五個地去數它,則最後還剩三個;如果七個七個地去數它,則最後也剩二個。問:這些物一共有多少?」用簡練的數學語言來表述就是:求這樣一個數,使它被3除餘2,被5除餘3,被7除餘2。
《孫子算經》給出了這道題目的解法和答案,用算式表示即為:
70×2+21×3+15×2-105×2=23
後來的數學家把這種解法編成了如下的一首詩歌以便於記誦:
「三人同行七十(70)稀,
五樹梅花二一(21)枝。
七子團圓正半月(15),
除百零五(105)便得知。
為什麼被3除的余數要乘70,而被5除的余數乘21,被7除的余數乘15呢?仔細研究不難發現:
5×7×2≡1(mod3),3×7≡1(mod5),3×5≡1(mod7),
這就是中國南宋數學家秦九韶在他的《數書九章》中提出的「大衍求一術」的理論,通俗地說,就是求「一個數的多少倍除以另一個數,所得的余數為一」。該理論在西方數學史著作中正式被稱為「中國剩餘定理」。
如何運用中國剩餘定理解題呢?
例1 除以3餘1,除以5餘2,除以7餘4的最小三位數是多少?
這類題目可以直接運用上述的詩歌內容來解答,即用被3除的余數去乘70,用被5除的余數去乘21,用被7除的余數去乘15,再根據要求找出最小的三位數:
1×70+2×21+4×15=70+42+60=172
由於172減去105的差為67,是兩位數,所以最小的三位數是172。
例2 一個數除以5餘3,除以7餘4,除以9餘5,這個數最少是多少?
此題由於出現「除以9餘5」,因此,如果照搬上述的方法顯然是行不通的,但仍可以運用上述的思維方式進行解答。
7×9≡3(mod5),余數同題中所要求的「一個數除以5餘3」相同。
5×9≡3(mod7),而題中要求「一個數除以7餘4」,因此,只有將5×9的積擴大一定倍數,讓其積被7除餘4才可,即:5×9×6≡270≡4(mod7)。
同理,5×7≡8(mod9),只有5×7×4≡140≡5(mod9)。
因此,這個數的解法為:
7×9+5×9×6+5×7×4-5×7×9
=63+270+140-315
=473-315
=158
所以,這個數最少是158。
在這題的解法中,有一個值得探討的問題是:在5×9≡3(mod7),余數與題中要求的「一個數除以7餘4」不符時,為什麼一定要將5×9的積擴大6倍,使其積被7除餘4呢?這是因為這樣的數就滿足了能被5和9整除,同時被7除餘4的要求,即5×9×6≡4(mod7)≡0(mod5)≡0(mod9)。同理,7×9≡3(mod5)≡0(mod7)≡0(mod9),5×7×4≡5(mod9)≡0(mod5)≡0(mod7)。所以,(5×9×6+7×9+5×7×4)≡473≡4(mod7)≡3(mod5)≡5(mod9)。
孫子算經
〈四庫全書.孫子算經.提要〉:
臣等謹案〈隋.經籍志〉有《孫子算經》二卷,不著其名,亦不著其時代,〈唐.藝文志〉稱李淳風注甄鸞《孫子算經》三卷於孫子上冠以甄鸞,蓋如淳風之注《周髀算經》因鸞所注,更加辨論也。《隋書》審度引《孫子算術》:「蠶所生吐絲為忽,十忽為秒,十秒為毫,十毫為氂,十氂為分。」本書乃作:「十忽為一絲,十絲為一毫。」又論嘉量,引《孫子算術》:「六粟為圭,十圭為抄,十抄為撮,十撮為勺,十勺為合。」本書乃作:「十圭為一撮,十撮為一抄,十抄為一勺。」考之《夏侯陽算經》引田曹、倉曹亦如本書,而《隋書》中所引與史傳往往多合,蓋古書傳本不一,校訂之儒各有據證,無妨參
差互見也。唐之選舉,算學凡十書,《孫子》《五曹》共限一歲習肄,於後來諸算術中,特為近古,第不知孫子何許人,《朱彝尊集》〈五曹算經.跋〉:「相傳其法出於孫武,然孫子別有算經,考古者存其說可爾。」又有〈孫子算經.跋〉雲:「首言度量,所起合乎兵法:『地生度,度生量,量生數』之文,次言乘除之法,設為之數,十三篇中所雲:
『廓地分利、委積、遠輸貴賣、兵役、分數』比之《九章》〈方田〉、〈粟米〉、〈差分〉、〈商功〉、〈均輸〉、〈盈不足〉之目,往往相符,而要在『得算多,多算勝』以是知此編非偽托也。」彝尊之意,蓋以為確出於孫武。今考書內設問有雲:「長安、洛陽相去九百里」又雲:「佛書二十九章,章六十三字。」則後漢明帝以後人語。孫武,春秋末人,安有是語乎!舊本久佚,今從《永樂大典》所載□集編次,仍為三卷,冠以〈原序〉,其甄、李二家之注,則不可復考,是則姚廣孝等割裂刊削之過矣。乾隆四十三年七月,恭校上。
總纂官:臣紀昀、臣陸錫熊、臣孫士毅。
總校官:臣陸費墀。
〈原序〉
孫子曰:夫算者:天地之經緯,群生之元首,五常之本末,陰陽之父母,星辰之建號,三光之表裡,五行之准平,四時之終始,萬物之祖宗,六藝之綱紀。稽群倫之聚散,考二氣之降升,推寒暑之迭運,步遠近之殊同,觀天道精微之兆基,察地理從橫之長短,采神祇之所在,極成敗之符驗。窮道德之理,究性命之情。立規矩,准方圓,謹法度,約尺丈,立權衡,平重輕,剖毫釐,析泰絫。歷億載而不朽,施八極而無疆。散之者,富有餘;背之者,貧且寠。心開者,幼沖而即悟;意閉者,皓首而難精。夫欲學之者,必務量能揆己,志在所專,如是,則焉有不成者哉!
〈卷上〉
度之所起,起於忽。欲知其忽,蠶吐絲為忽,十忽為一絲,十絲為一毫,十毫為一氂,十氂為一分,十分為一寸,十寸為一尺,十尺為一丈,十丈為一引,五十引為一端,四十尺為一匹,六尺為一步,二百四十步為一畝,三百步為一里。
稱之所起,起於黍。十黍為一絫,十絫為一銖,二十四銖為一兩,十六兩為一斤,三十斤為一鈞,四鈞為一石。
量之所起,起於粟。六粟為一圭,十圭為一撮,十撮為一抄,十抄為一勺,十勺為一合,十合為一升,十升為一斗,十斗為一斛,十斛得六千萬粟。所以得知者,六粟為一圭,十圭六十粟為一撮,十撮六百粟為一抄,十抄六千粟為一勺,十勺六萬粟為一合,十合六十萬粟為一升,十升六百萬粟為一斗,十斗六千萬粟為一斛,十斛六億粟百,斛六兆粟,千斛六京粟,萬斛六陔粟,十萬斛六秭粟,百萬斛六穰粟,千萬斛六溝粟,萬萬斛為一億六澗粟,十億斛六正粟,百億斛六載粟。
凡大數之法:萬萬曰億,萬萬億曰兆,萬萬兆曰京,萬萬京曰陔,萬萬陔曰秭,萬萬秭曰穰,萬萬穰曰溝,萬萬溝曰澗,萬萬澗曰正,萬萬正曰載。
周三,徑一,方五,邪七。見邪求方,五之,七而一;見方求邪,七之,五而一。
白銀方寸重一十四兩。
玉方寸重一十兩。
銅方寸重七兩半。
鉛方寸重九兩半。
鐵方寸重七兩。
石方寸重三兩。
凡算之法:先識其位,一從十橫,百立千僵,千十相望,萬百相當。(案:萬百原本訛作百萬,今據《夏侯陽算經》改正。)
凡乘之法:重置其位,上下相觀,頭位有十步,至十有百步,至百有千步,至千以上命下所得之數列於中。言十即過,不滿,自如頭位。乘訖者,先去之下位;乘訖者,則俱退之。六不積,五不只。上下相乘,至盡則已。
凡除之法:與乘正異乘得在中央,除得在上方,假令六為法,百為實,以六除百,當進之二等,令在正百下。以六除一,則法多而實少,不可除,故當退就十位,以法除實,言一六而折百為四十,故可除。若實多法少,自當百之,不當復退,故或步法十者,置於十百位(頭位有空絕者,法退二位。)余法皆如乘時,實有餘者,以法命之,以法為母,實余為子。
以粟求糲米,三之,五而一。
以糲米求粟,五之,三而一。
以糲米求飯,五之,二而一。
以粟米求糲飯,六之,四而一。
以糲飯求糲米,二之,五而一。
以□米求飯,八之,四而一。
十分減一者,以二乘二十除;減二者,以四乘二十除;減三者,以六乘二十除;減四者,以八乘二十除;減五者,以十乘二十除;減六者,以十二乘二十除;減七者,以十四乘二十除;減八者,以十六乘二十除;減九者,以十八乘二十除。
九分減一者,以二乘十八除。
八分減一者,以二乘十六除。
七分減一者,以二乘十四除。
六分減一者,以二乘十二除。
五分減一者,以二乘十除。
九九八十一,自相乘得幾何?答曰:六千五百六十一。
術曰:重置其位,以上八呼下八,八八六十四即下,六千四百於中位;以上八呼下一,一八如八,即於中位下八十,退下位一等,收上頭位八十(案:原本脫「上」字,今補。)以上位一(案:上位原本訛作「頭位」,今改正。)呼下八,一八如八,即於中位,下八十;以上一呼下一,一一如一,即於中位下一,上下位俱收中位,即得六千五百六十一。
六千五百六十一,九人分之。問:人得幾何?答曰:七百二十九。
術曰:先置六千五百六十一於中位,為實,下列九人為法,頭位置七百(案:原本脫上字,今補。),以上七呼下九,七九六十三,即除中位六千三百,退下位一等,即上位,置二十(案:上位原本訛作頭位,今改正。),以上二呼下九,二九一十八,即除中位一百八十,又更退下位一等,即上位,更置九(案:上位原本亦訛作頭位,今改正。),即以上九呼下九,九九八十一,即除中位八十一,中位並盡,收下位,頭位所得即人之所得,自八八六十四至一一如一,並准此。
八九七十二,自相乘,得五千一百八十四,八人分之,人得六百四十八。
七九六十三,自相乘,得三千九百六十九,七人分之,人得五百六十七。
六九五十四,自相乘,得二千九百一十六,六人分之,人得四百八十六。
五九四十五,自相乘,得二千二十五,五人分之,人得四百五。
四九三十六,自相乘,得一千二百九十六,四人分之,人得三百二十四。
三九二十七,自相乘,得七百二十九,三人分之,人得二百四十三。
二九一十八,自相乘,得三百二十四,二人分之,人得一百六十二。
一九如九,自相乘,得八十一,一人得八十一。
右九九一條,得四百五,自相乘,得一十六萬四千二十五,九人分之,人得八千二百二十五。
八八六十四,自相乘,得四千九十六,八人分之,人得五百一十二。
七八五十六,自相乘,得三千一百三十六,七人分之,人得四百四十八。
六八四十八,自相乘,得二千三百四,六人分之,人得三百八十四。
五八四十,自相乘,得一千六百,五人分之,人得三百二十。
四八三十二,自相乘,得一千二十四,四人分之,人得二百五十六。
三八二十四,自相乘,得五百七十六,三人分之,人得一百九十二。
二八十六,自相乘,得二百五十六,二人分之,人得一百二十八。
一八如八,自相乘,得六十四,一人得六十四。
右八八一條,得二百八十八,自相乘,得八萬二千九百四十四,八人分之,人得一萬三百六十八。
七七四十九,自相乘,得二千四百一,七人分之,人得三百四十三。
六七四十二,自相乘,得一千七百六十四,六人分之,人得二百九十四。
五七三十五,自相乘,得一千二百二十五,五人分之,人得二百四十五。
四七二十八,自相乘,得七百八十四,四人分之,人得一百九十六。
三七二十一,自相乘,得四百四十一,三人分之,人得一百四十七。
二七一十四,自相乘,得一百九十六,二人分之,人得九十八。
一七如七,自相乘,得四十九,一人得四十九。
右七七一條,得一百九十六,自相乘,得三萬八千四百一十六,七人分之,人得五千四百八十八。
六六三十六,自相乘,得一千二百九十六,六人分之,人得二百一十六。
五六三十,自相乘,得九百,五人分之,人得一百八十。
四六二十四,自相乘,得五百七十六,四人分之,人得一百四十四。
三六一十八,自相乘,得三百二十四,三人分之,人得一百八。
二六一十二,自相乘,得一百四十四,二人分之,人得七十二。
一六如六,自相乘,得三十六,一人得三十六。
右六六一條,得一百二十六,自相乘,得一萬五千八百七十六,六人分之,人得二千六百四十六。
五五二十五,自相乘,得六百二十五,五人分之,人得一百二十五。
四五二十,自相乘,得四百,四人分之,人得一百。
三五一十五,自相乘,得二百二十五,三人分之,人得七十五。
二五一十,自相乘,得一百,二人分之,得五十。
一五如五,自相乘,得二十五,一人得二十五。
右五五一條,得七十五,自相乘,得五千六百二十五,五人分之,人得一千一百二十五。
四四一十六,自相乘,得二百五十六,四人分之,人得六十四。
三四一十二,自相乘,得一百四十四,三人分之,人得四十八。
二四如八,自相乘,得六十四,二人分之,人得三十二。
一四如四,自相乘,得一十六,一人得一十六。
右四四一條,得四十,自相乘,得一千六百,四人分之,人得四百。
三三如九,自相乘,得八十一,三人分之,人得二十七。
二三如六,自相乘,得三十六,二人分之,人得一十八。
一三如三,自相乘,得九,一人得九。
右三三一條,得一十八,自相乘,得三百二十四,三人分之,人得一百八。
二二如四,自相乘,得一十六,二人分之,人得八。
一二如二,自相乘,得四,一人得四。
右二二一條,得六,自相乘,得三十六,二人分之,人得一十八。
一一如一,自相乘,得一,一乘不長。
右從九九至一一,總成一千一百五十五,自相乘,得一百三十三萬四千二十五,九人分之,人得一十四萬八千二百二十五。
以九乘一十二,得一百八,六人分之,人得一十八。
以二十七乘三十六,得九百七十二,一十八人分之,人得五十四。
以八十一乘一百八,得八千七百四十八,五十四人分之,人得六十二。
以二百四十三乘三百二十四,得七萬八千七百三十二,一百六十二人分之,人得四百八十六。
以七百二十九乘九百七十二,得七十萬八千五百八十八,四百八十六人分之,人得一千四百五十八。
以二千一百八十七乘二千九百一十六,得六百三十七萬七千二百九十二,一千四百五十八人分之,得四千三百七十四。
以六千五百六十一乘八千七百四十八,得五千七百三十九萬五千六百二十八,四千三百七十四人分之,人得一萬三千一百二十二。
以一萬九千六百八十三乘二萬六千二百四十四,得五億一千六百五十六萬六百五十二,一萬三千一百二十二人分之,人得三萬九千三百六十六。
以五萬九千四十九乘七萬八千七百三十二,得四十六億四千九百四萬五千八百六十八,三萬九千三百六十六人分之,人得一十一萬八千九十八。
以一十七萬七千一百四十七乘二十三萬六千一百九十六,得四百一十八億四千一百四十一萬二千八百一十二,一十一萬八千九十八人分之,得三十五萬四千二百九十四。
以五十三萬一千四百四十一乘七十萬八千五百八十八,得三千七百六十五億七千二百七十一萬五千三百八,三十五萬四千二百九十四人分之,人得一百六萬二千八百八十二。
〈卷中〉
今有一十八分之一十二。問:約之得幾何?答曰:三分之二。
術曰:置十八分在下,一十二分在上,副置二位以少減多,等數得六為法,約之即得。
今有三分之一、五分之二。問:合之二得幾何?答曰:一十五分之十一。
術曰:置三分五分在右方,之一之二在左方,母互乘子,五分之二得六,三分之一得五,並之,得一十一為實;又方二母相乘,得一十五為法。不滿法,以法命之,即得。
今有九分之八,減其五分之一。問:余幾何?答曰:四十五分之三十一。
術曰:置九分五分在右方,之八之一在左方,母互乘子,五分之一得九,九分之八得四十,以少減多,餘三十一,為實;母相乘,得四十五,為法。不滿法,以法命之,即得。
今有三分之一,三分之二,四分之三。問:減多益少,幾何而平?答曰:減四分之三者二,減三分之二者一,並以益三分之一,而各平於一十二分之七。
④ 孫子算經的介紹
《孫子算經》是中國古代重要的數學著作。約成書於四、五世紀,也就是大約一千五百年前,作者生平和編寫年不詳。傳本的《孫子算經》共三卷。卷上敘述算籌記數的縱橫相間制度和籌算乘除法,卷中舉例說明籌算分數演算法和籌算開平方法。卷下第31題,可謂是後世「雞兔同籠」題的始祖,後來傳到日本,變成「鶴龜算」。書中是這樣敘述的:「今有雉兔同籠,上有三十五頭,下有九十四足,問雉兔各幾何?這四句話的意思是:有若干只雞兔同在一個籠子里,從上面數,有35個頭;從下面數,有94隻腳。求籠中各有幾只雞和兔? 此題被義務教育課程標准實驗教科書人教版數學五年級上冊選為補充教材。
⑤ 孫子演算法
我們首先需要先求出三個數:
第一個數能同時被3和5整除,但除以7餘1,即15;
第二個數能同時被3和7整除,但除以5餘1,即21;
第三個數能同時被5和7整除,但除以3餘1,即70;
然後將這三個數分別乘以被7、5、3除的余數再相加,即:15×2+21×3+70×2=233.
最後,再減去3、5、7最小公倍數的整數倍,可得:233-105×2=23.或105k+23(k為正整數).
由於物數量在100至200之間,故當k=1時,105+23=128
故答案為:128
⑥ 孫子算經的社會影響
孫子算經,中國南北朝數術著作,《算經十書》之一。 在我國古代漢族勞動人民中,長期流傳著「隔牆算」、「剪管術」、「秦王暗點兵」等數學游戲。有一首「孫子歌」,甚至遠渡重洋,輸人日本:
「三人同行七十稀,五樹梅花廿一枝,
七子團圓正半月,除百零五便得知。」
這些饒有趣味的數學游戲,以各種不同形式,介紹世界聞名的「孫子問題」的解法,通俗地反映了漢族古代數學一項卓越的成就。「孫子問題」在現代數論中是一個一次同餘問題,它最早出現在我國公元四世紀的數學著作《孫子算經》中。《孫子算經》卷下「物不知數」題說:有物不知其數,三個一數餘二,五個一數餘三,七個一數又餘二,問該物總數幾何?顯然,這相當於求不定方程組
N=3x+2,N=5y+3,N=7z+2
的正整數解N,或用現代數論符號表示,等價干解下列的一次同餘組。
N=2(mod3);N=3(mod5);N=2(mod7)
《孫子算經》所給答案是N=23。由於孫子問題數據比較簡單,這個答數通過試算也可以得到。但是《孫子算經》並不是這樣做的。「物不知數」題的術文指出解題的方法多三三數之,取數七十,與余數二相乘;五五數之,取數二十一,與余數三相乘;七七數之,取數十五,與余數二相乘。將諸乘積相加,然後減去一百零五的倍數。列成算式就是:
N=70×2+21×3+15×2-2×105=23。
這里105是模數3、5、7的最小公倍數,容易看出,《孫子算經》給出的是符合條件的最小正整數。對於一般余數的情形,《孫子算經》術文指出,只要把上述演算法中的余數2、3、2分別換成新的余數就行了。以R1、R2、R3表示這些余數,那麼《孫子算經》相當於給出公式
N=70×R1+21×R2+15×R3-P×105(p是整數)。
孫子演算法的關鍵,在於70、21和15這三個數的確定。後來流傳的《孫子歌》中所說「七十稀」、「廿一技」和「正半月」,就是暗指這三個關鍵的數字。《孫子算經》沒有說明這三個數的來歷。實際上,它們具有如下特性:
也就是說,這三個數可以從最小公倍數M=3×5×7=105中各約去模數3、5、7後,再分別乘以整數2、1、1而得到。假令k1=2,K2=1,K3=1,那麼整數Ki(i=1,2,3)的選取使所得到的三數70、21、15被相應模數相除的時候余數都是1。由此出發,立即可以推出,在余數是R1、R2、R3的情況下的情況。
應用上述推理,可以完全類似地把孫子演算法推廣到一般情形:設有一數N,分別被兩兩互素的幾個數a1、a2、……an相除得余數R1、R2、……Rn,即
N≡Ri(mod ai)(i=1、2、……n),
只需求出一組數K,使滿足
1(mod ai)(i=1、2、……n),
那麼適合已給一次同餘組的最小正數解是
(P是整數,M=a1×a2×……×an),
這就是現代數論中著名的剩餘定理。如上所說,它的基本形式已經包含在《孫子算經》「物不知數」題的解法之中。不過《孫子算經》沒有明確地表述這個一般的定理。
孫子問題出現在公元四世紀的中國算書中,這並不是偶然的。我國古代天文歷法資料表明,一次同餘問題的研究,明顯地受到天文、歷法需要的推動,特別是和古代歷法中所謂「上元積年」的計算密切相關。大家知道,一部歷法,需要規定一個起算時間,我國古代歷算家把這個起點叫做「歷元」或「上元」,並且把從歷元到編歷年所累積的時間叫做「上元積年」。上元積年的推算需要求解一組一次同餘式。以公元三世紀三國時期魏國施行的《景初歷》做例,這部歷法規定以冬至、朔旦(朔日子夜)和甲子日零時會合的時刻作為歷元。設a是一回歸年日數,b是一朔望月日數,當年冬至距甲子日零時是R1日,離平朔時刻是R2日,那麼《景初歷》上元積元數N就是同餘組的解。
aN≡Ri(mod 60)≡R2(mod b)
到了南北朝時期,祖沖之《大明歷》(公元462年)更要求歷元必須同時是甲子年的開始,而且「日月合璧」、「五星聯珠」(就是日、月、五大行星處在同一方位),月亮又恰好行經它的近地點和升交點。這樣的條件下推算上元積年,就相當於要求解十個同餘式了。天文歷法數據一般又都十分龐雜,所以,在《孫子算經》成書前後的魏晉南北朝時期,我國的天文歷算家無疑已經能夠求解形式比《孫子算經》「物不知數」題復雜得多的一次同餘式,因而必定掌握了按一定程序計算一次同餘式的方法。《孫子算經》比例題的形式總結、反映了這一事實。以後天文歷算家長期沿用孫子演算法推算上元積年,這中間肯定會引起更加深入的探討。到公元十三世紀,大數學家秦九韶集前法之大成,終於在一次同餘式的研究上獲得了超越前人的輝煌成果。
秦九韶,字道古,生活於南宋時期,自幼喜好數學,經過長期積累和苦心鑽研,干公元1247年寫成《數書九章》。這部中世紀的數學傑作,在許多方面都有創造,其中求解一次同餘組的「大衍求一術」和求高次方程數值解的「正負開方術」,更是具有世界意義的成就。
這里主要介紹秦九韶對一次同餘論的偉大貢獻。
秦九韶在《數書九章》中明確地系統地敘述了求解一次同餘組
的一般計算步驟。秦的方法,正是前述的剩餘定理。我們知道,剩餘定理把一般的一次同餘問題歸結為滿足條件的一組數Ki,的選定。秦九韶給這些數起名叫「乘率」,並且在《數書九章》卷一「大衍總術」中詳載了計算乘率的方法——「大衍求一術」。
為了介紹「大衍求一術」,我們以任一乘率ki的計算作例。如果Gi=>ai,秦九韶首先令ai除Gi,求得余數gi<ai,那麼
Gi≡gi(mod ai),
於是 kiGi≡Kigi(mod ai),
但是因為 kiGi≡1(mod ai),
所以問題歸結為求ki使適合kigi≡1(mod ai)。秦九韶把ai叫「定數」,gi叫「奇數」,他的「大衍求一術」,用現代語言解釋,實際就是把奇數gi和定數ai輾轉相除,相繼得商數q1、q2、……qn和余數r1、r2、……rn,在輾轉相除的時候,隨即算出下面右列的c值:
秦九韶指出,當rn=1而n是偶數的時候,最後得到的cn就是所求乘率ki。如果rn=1而n是奇數,那麼把rn-1和rn相除,形式上令qn+1=rn-1-1,那麼余數rn+1仍舊是1,再作cn+1=qn+1cn+cn-1,qn+1=rn-1-1是偶數,cn+1就是所求的ki。不論哪種情形,最後一步都出現余數1,整個計算到此終止,秦九韶因此把他的方法叫做「求一術」(至於「大衍」的意思,秦九韶本人在《數書九章》序中把它和《周易》「大衍之數」相附會)。可以證明,秦九韶這一演算法是完全正。所有這些系統的理論,周密的考慮,即使以今天的眼光看來也很不簡單,充分顯示了秦九韶高超的數學水平和計算技巧。秦九韶小時曾跟隨他父親到南宋京城杭州,向太史局(主管天確,十分嚴密的。
在秦九韶那個時代,計算仍然使用算籌。秦九韶在一個小方盤上,右上布置奇數g,右下布置定數a,左上置1(他叫它做「天元1」),然後在右行上下交互以少除多,所得商數和左上(或下)相乘並入左下(或上),直到右上方出現1為止。下頁就是秦九韶的一般籌算圖式,右邊是一個數字例子(g=20,a=27,K=C4=23)。
秦九韶在《數書九章》中採集了大量例題,如「古歷會積」、「積尺尋源」、「推計土功」、「程行計地」等等,廣泛應用大衍求一術來解決歷法、工程、賦役和軍旅等實際問題。在這些實際問題中,模數ai並不總是兩兩互素的整數。秦九韶區分了「元數」(ai是整數)、「收數」(ai是小數)、「通數」(ai是分數)等不同情形,並且對每種情形給出了處理方法。「大衍總術」把「收數」和「通數」化成「元數」的情形來計算,而對於元數不兩兩互素的情形,給出了可靠的程序,適當選取那些元數的因子作定數而把問題歸結為兩兩互素的情形
文歷法的機構)的官員學習天文歷法,「大衍求一術」很可能就是他總結天文歷法計算上元積年方法的結果。但是「大衍求一術」似乎沒有為他同時代的人所充分理解。明中葉以後幾乎失傳。一直到清代,「大衍求一術」又重新被發掘出來,引起了許多學者(張敦仁、李銳、駱騰鳳、黃宗憲等)的興趣。他們對「大衍求一術」進行了解釋、改進和簡化,其中黃宗憲《求一術通解》對模數非兩兩互素的情形給出了更加簡明的方法,但是時代已是晚清。
從《孫子算經》「物不知數」題到秦九韶的「大衍求一術」,古代漢族數學家對一次同餘式的研究,不僅在中國數學史上而且在世界數學史上佔有光榮的地位。在歐洲,最早接觸一次同餘式的,是和秦九韶同時代的義大利數學家裴波那契(1170—1250),他在《演算法之書》中給出了兩個一次同餘問題,但是沒有一般的演算法。這兩個問題從形式到數據都和孫子物不知數題相仿,整個水平沒有超過《孫子算經》。直到十八、十九世紀,大數學家歐拉(1707—1783)於公元1743年、高斯(1777—1855)於公元1801年對一般一次同餘式進行了詳細研究,才重新獲得和秦九韶「大衍求一術」相同的定理,並且對模數兩兩互素的情形給出了嚴格證明。歐拉和高斯事先並不知道中國人的工作。公元1852年英國傳教士偉烈亞力(1815—1887)發表《中國科學摘記》,介紹了《孫子算經》物不知數題和秦九韶的解法,引起了歐洲學者的重視。1876年,德國馬蒂生(1830—1906)首先指出孫子問題的解法和高斯方法一致,當時德國著名數學史家康托(1829—1920)看到馬蒂生的文章以後,高度評價了「大衍術」,並且稱贊發現這一方法的中國數學家是「最幸運的天才」。直到今天,「大衍求一術」仍然引起西方數學史家濃厚的研究興趣。如1973年,美國出版的一部數學史專著《十三世紀的中國數學》中,系統介紹了中國學者在一次同餘論方面的成就,作者力勃雷希(比利時人)在評論秦九韶的貢獻的時候說道:「秦九韶在不定分析方面的著作時代頗早,考慮到這一點,我們就會看到,薩頓稱秦九韶為『他那個民族、他那個時代、並且確實也是所有時代最偉大的數學家之一』,是毫不誇張的。」
印度學者對一次同餘論也有過重要貢獻。從公元六世紀到十二世紀,他們發展了一種稱為「庫塔卡」的演算法,用來求解和一次同餘式等價的不定方程組。「庫塔卡」法出現在孫子演算法之後,印度數學家婆羅門復多(七世紀)、摩柯吠羅(九世紀)等人的著作中,都有和物不知數題相同的一次同餘問題。這當然不是要藉此斷言「庫塔卡」法一定受到了孫子演算法的影響,但是有人(如萬海依等)硬說中自的「大衍求一術」來源於「庫塔卡」,就是毫無根據的妄說了。萬海依居然把中國演算法中數碼從左到右橫寫作為「大衍術」受印度影響的重要根據。大家知道,中國古代至遲從春秋戰國時期就開始使用算籌記數,我們今天還可以從現存的公元前三世紀的貨幣上看到這種從左到右的記數方法。由此可見,萬海依的論點多麼荒唐可笑。中國古代數學家對一次同餘論的研究有明顯的獨創性和繼承性,「大衍求一術」在世界數學史上的崇高地位是毋容置疑的,正因為這樣,在西方數學史著作中,一直公正地稱求解一次同餘組的剩餘定理為「中國剩餘定理」。 在中國古算書中,《孫子算經》一直在我國數史佔有重要的地位,其中的「盈不足術」、「盪杯問題」等都有著許多有趣而又不乏技巧算術程式。
孫子算經.卷下第十七問給我們描述的就是著名的「盪杯問題」的程式。題曰:「今有婦人河上盪杯。津吏問曰:『杯何以多?』婦人曰:『有客。』津吏曰:『客幾何?』婦人曰:『二人共飯,三人共羹,四人共肉,凡用杯六十五。不知客幾何?」
很明顯,這里告訴我們這次洗碗事件,要處理的是65個碗共有多少人的問題。其中有能了解客數的信息是2人共碗飯,3人共碗羹,4人共碗肉。通過這幾個數值,很自然就能解決客數問題。因為客數是固定值,因此將其列成今式為N/2+N/3+N/4=65,易得客數六十人。
而該題的解法與今解如出一轍,其有「術曰:置六十五杯,以一十二乘之,得七百八十,以十三除之,即得」可證。
⑦ 孫子算經主要講了什麼
《孫子算經》是中國古代重要的數學著作。成書大約在四、五世紀,也就是大約一千五百年前,作者生平和編寫年不詳。傳本的《孫子算經》共三卷。卷上敘述算籌記數的縱橫相間制度和籌算乘除法,卷中舉例說明籌算分數演算法和籌算開平方法。卷下第31題,可謂是後世「雞兔同籠」題的始祖,後來傳到日本,變成「鶴龜算」。書中是這樣敘述的:「今有雉兔同籠,上有三十五頭,下有九十四足,問雉兔各幾何?這四句話的意思是:有若干只雞兔同在一個籠子里,從上面數,有35個頭;從下面數,有94隻腳。求籠中各有幾只雞和兔? 此題被義務教育課程標准實驗教科書人教版數學五年級上冊選為補充教材並且在部分五~六年級的課外習題所用。
⑧ 孫子演算法(木馬板凳三十三,一百隻腿地上竄,木馬板凳各有多少)
設木馬X個,則板凳為(33-X)張,列方程:
3X+4(33-X)=100
解之,得X=32(個)
則板凳為:33-32=1(張)
小學生的解法:
列出100以內3的倍數,也就是木馬可能的腿數:3,6,9,12......96,99.
列出100以內4的倍數,即板凳可能的腿數:4,8,12,16......96,100.
從以上兩列數中各任意選取一個數相加使他們的和等於100,只有12和88,24和76,36和64,48和52,60和40,72和28,84和16,96和4符合。然後,據此計算木馬和板凳可能的數量:(4和22),(8和19) ,(12和16),(16和13),(20和10),(24和7),(28和4),(32和1)。只有32+1=33,符合題意。
答:木馬有32個,板凳有1張。
⑨ 孫子算數
最早提出並記敘這個數學問題的,是南北朝時期的數學著作《孫子算經》中的「物不知數」題目.這道「物不知數」的題目是這樣的:
「今有一些物不知其數量.如果三個三個地去數它,則最後還剩二個;如果五個五個地去數它,則最後還剩三個;如果七個七個地去數它,則最後也剩二個.問:這些物一共有多少?」
不是如你所理解的那樣.實際上70是能被5和7整除但被3除餘1,21能被3和7整除但5除餘1,15能被3和5整除但被7除餘1.題目中此數被3除餘2,那就用70乘以2,被5除餘3,那麼就用21乘3,被7除餘2,那就15乘2,相加.70×2 + 21×3 +15×2=233.
看情況減3、5、7的最小公倍數的倍數.此題減105的2倍,得到23.
這個系統演算法是南宋時期的數學家秦九韶研究後得到的.
這就是著名的中國剩餘定理.