孙子算法总结
① 关于孙子问题的算法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.
这个系统算法是南宋时期的数学家秦九韶研究后得到的.
这就是着名的中国剩余定理.