今有雉、兔同笼,上有三十五头,下有九十四足。问:雉、兔各几何?答曰:雉二十三,兔一十二。
术曰:上置三十五头,下置九十四足。半其足,得四十七,以少减多,再命之,上三除下三,上五除下五,下有一除上一,下有二除上二,即得。又术曰:上置头,下置足,半其足,以头除足,以足除头,即得。
算法译文:第一行放好头的数目,第二行放好脚的数目。将脚的数目除以二,得四十七。以较少的头数减较多的”脚数的一半“,得十二(现在我们知道这就是兔的数目),将第一行的算筹数目根据第二行得出的数目依次取去,即得鸡的数目。
另一种算法是:第一行放头的数目,第二行放脚的数目,将脚的数目除以二,从脚的数目的一半减去头的数目,再从头的数目减去刚才所获得的结果,即得鸡的数目。
下卷27题则是”鸡兔同笼“的一种推广。即使是头多于一个的奇异生物也能计算它们的数量。
今有兽,六首四足;禽,四首二足,上有七十六首,下有四十六足。问:禽、兽各几何?答曰:八兽、七禽。
术曰:倍足以减首,余半之,即兽;以四乘兽,减足,余半之,即禽。
算法译文:将脚的总数乘以二,减去头的数目,差除以二,得到兽的数目。将兽的数目乘以四,减去脚的数目,除以二,得到禽的数目。
下卷第28题“物不知数”为后来的“大衍求一术”的起源,被看作是中国数学史上最有创造性地成就之一,称为中国余数定理:今有物,不知其数。三三数之,剩二;五五数之,剩三;七七数之,剩二。问:物几何?答曰:二十三。
术曰:三三数之,剩二,置一百四十;五五数之,剩三,置六十三;七七数之,剩二,置三十。并之,得二百三十三,以二百一十减之,即得。凡三三数之,剩一,则置七十;五五数之,剩一,则置二十一;七七数之,剩一,则置十五。一百六以上,以一百五减之,即得。
下卷最后一题还提供了一种卜算胎儿性别的”方法“,颇有些现代”校验算法“的旨趣,一并记之如下:
今有孕妇,行年二十九岁。难九月,未知所生?答曰:生男。
术曰:置四十九加难月,减行年,所余以天除一,地除二,人除三,四时除四,五行除五,六律除六,七星除七,八风除八,九州除九。其不尽者,奇则为男,耦则为女。
算法译文:基数七七四十九,加上孕妇的孕期(九月,得五十八),减去孕妇的年龄(二十九,得二十九)。计算结果连续除以一到九的整数。如果最后余数的和是奇数就是生男,偶数就是生女。本例的结果是0、1、2、1、4、5、1、5、2,和为21,所以孕妇生的是男孩。
《孙子算经》有新加坡大学数学教授蓝丽蓉的英译本。
社会影响
孙子算经,中国南北朝数术著作,《算经十书》之一。
剩余定理
在我国古代劳动人民中,长期流传着“隔墙算”、“剪管术”、“秦王暗点兵”等数学游戏。有一首“孙子歌”,甚至远渡重洋,输入日本:
“三人同行七十稀,五树梅花廿一枝,
七子团圆正半月,除百零五便得知。”
这些饶有趣味的数学游戏,以各种不同形式,介绍世界闻名的“孙子问题”的解法,通俗地反映了中国古代数学一项卓越的成就。“孙子问题”在现代数论中是一个一次同余问题,它最早出现在我国公元四世纪的数学著作《孙子算经》中。《孙子算经》卷下“物不知数”题说:有物不知其数,三个一数余二,五个一数余三,七个一数又余二,问该物总数几何?显然,这相当于求不定方程组
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的情况下的情况。