这是依据《孙子算经》上有名的“孙子问题”(又称“物不知数题”)编写而成的。原来的题目是:
“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?”
用通俗的话来说,题目的意思就是
有一些物品,不知道有多少个,只知道将它们三个三个地数,会剩下2个;五个五个地数,会剩下3个;七个七个地数,也会剩下2个。这些物品的数量至少是多少个?
(注:诗题及题目原文都无“至少”二字,但“孙子问题”都是些求“最少”或者求“至少”的问题,否则就会有无数多个答案。所以,解释题目意思时,在语句中加上了“至少”二字。)
《孙子算经》解这道题目的“术文”和答案是:
“三三数之剩二,置一百四十;五五数之剩三,置六十三;七七数之剩二,置三十。并之,得二百三十三,以二百十减之,即得。”“答曰:二十三。”
这些话是什么意思呢?用通俗的话来说,就是:
先求被3除余2,并能同时被5、7整除的数,这样的数最小是140;
再求被5除余3,并能同时被3、7整除的数,这样的数最小是63;
然后求被7除余2,并能同时被3、5整除的数,这样的数最小是30。
于是,由140+63+30=233,得到的233就是一个所要求得的数。但这个数并不是最小的。
再用求得的“233”减去或者加上3、5、7的最小公倍数“105”的倍数,就得到许许多多这样的数:
{23,128,233,338,443,…}
从而可知,23、128、233、338、443、…都是这一道题目的解,而其中最小的解是23。
答:这些物品的数目至少是23个。
需要指出的是,在《孙子算经》上,有一段关于这类题目的解题“术文”:
“凡三三数之剩一则置七十,五五数之剩一则置二十一,七七数之剩一则置十五,一百六以上以一百五减之,即得。”
(注:古称“106”和“105”为“一百六”和“一百五”,而称“160”和“150”为“一百六十”和“一百五十”。所以,这里的“一百六”和“一百五”分别指“106”和“105”,而不是“160”和“150”。)
明代著名的大数学家程大位,在他所著的《算法统宗》中,对于这种解一般“孙子问题”的方法,还编出了四句歌诀,名曰《孙子歌》:
三人同行七十稀,
五树梅花廿一枝;
七子团圆正半月,
除百零五便得知。
歌中的“廿”,读音与“念”音相同。“廿”即二十的意思。
这一歌诀的“诗意”,我们可以不去理会,只需注意它的数字就行了。歌诀中的每一句话,都指出了一步解题方法:
“三(3)人同行七十(70)稀”——是说除以3所得的余数,要用“70”去乘它;
“五(5)树梅花廿一(21)枝”——是说除以5所得的余数,要用“21”去乘它;
“七(7)子团圆正半月(15)”——“半月”是一个月30天的一半,即15日,这是说,除以 7所得的余数,要用“ 15”去乘它;
“除百零五(105)便得知”——这是说要把上面所乘得的三个数相加,加得的和如果大于105,便应减去105,或者减去105的倍数。这也就是《孙子算经》上的“一百六(106)以上,以一百五(105)减之”。这样得出的差,便是所要求的这个最小的未知数了。
运用这一歌诀来解答这道“物不知数”问题,便是
2×70+3×21+2×15=140+63+30=233
233-105-105=23(答略)
不过,用这种方法解这类问题,有它的局限性,它只能解答用3、5、7作除数的题目,遇到用其他数作除数的算题,它就行不通了。这一点必须引起我们的注意。
这种“物不知数(孙子)问题”,在我国古代流传的算法名称很多。宋朝周宓称它为“鬼谷算”、“隔墙算”(之所以称“鬼谷算”,大概是因为它与传说中的哲学家鬼谷子有某些关系);13世纪的大数学家杨辉则称它为“剪管术”。南宋数学家秦九韶将它推广,并又发现一种算法,称它为“大衍求一术”。它被传入西方后,外国人又称它为“中国剩余定理”。