新浪科技 探索

《孙子算经》除了“鸡兔同笼”,还介绍了这个问题

新浪科技综合

关注

来源:中科院之声

《孙子算经》是一本十分著名的中国古代数学典籍。除了非常著名的“鸡兔同笼”问题之外,其中还有一个广为流传的经典数学问题——“物不知数”问题。

什么是“物不知数”问题呢?相信大家一定都听过一个很著名的数学故事“韩信点兵”,此故事在很多书籍故事中都提到过。说在大战之后,韩信让士兵们列队然后清点人数。如果士兵们三人一组,那就会多出两个人来;如果按五个人一组,就会有三个人剩余;要是让七人一组的话,则又会多出两个人。这个问题的最终解决方法被称为孙子定理,也叫做“中国余数定理”或“中国剩余定理”。

用现代的数学语言来解释的话,中国剩余定理就是个一元线性同余方程组。解这个方程组最“笨”的办法就是穷举法。以“韩信点兵”问题为例,把所有小于105的自然数都试一遍,然后找到满足条件的自然数即可。

除以3余数为2 的数字有:2、5、8、11、14、17、20、23、26…

除以5余数是3 的数字有:3、8、13、18、23、28…

除以7余数是2的数字有:2、9、16、23、30…

可以观察到,三个条件都满足的最小正数是23,所以23是这个问题的一个答案。这个问题还有无穷多个其他的解。所有的解都可以通过23加上105的若干倍得到,105在这里是3、5、7的最小公倍数。

穷举法对求解简单的“物不知数”问题速度很快,但是在问题稍微复杂之后,计算量变得很大。《孙子算经》中给出的算法比穷举法进步一些,古代数学家程大位把《孙子算经》中的解法总结成一段口诀:

三人同行七十稀,

五树梅花二十一。

七子团圆正半月,

除百零五便得知。

翻译成白话就是:给定一个数,这个数分别除以3,5和7,得到的余数分别乘以70,21和15。最后把这些乘积相加,最终的结果与初始给定的数一定相差105的倍数。

“物不知数”问题开创了同余数研究的先河,但是它没有写明算法中出现的70,21和15是如何获得的,所以《孙子算经》并没给出求解此类问题的通用方法。

宋代数学家秦九韶在《数书九章》中第一次完整、详细的阐述了求解一次同余方程组的算法“大衍求一术”。“大衍求一术”通过特定方法求出了70,21和15三个数,并且阐述了求得的这三个数具备下面的性质:

70是5和7的公倍数,同时被3除余1;

21是3和7的公倍数,同时除以5余1;

15是3和5的公倍数,同时除以7余1;

所以,在求出70,21和15三个数之后,如果要寻找一个被3除余a,被5除b,被7除余c的数,其中的一个答案是70a+21b+15c,其它所有的答案都和70a+21b+15c相差105的整数倍。

《孙子算经》的“物不知数”问题和“大衍求一术”也是为数不多被世界广泛承认的中国古代数学成就之一。英国传教士伟烈亚力在1852年发表的《中国科学摘记》中系统的介绍了《孙子算经》“物不知数”问题和秦九韶的“大衍求一术”;1876年,德国数学家马蒂生首先指出 “大衍求一术”和数学王子高斯在1801年提出的一元线性同余方程组的通用解法等价;德国著名数学史家康托也高度评价了“大衍术”,并称赞发现这一方法的中国数学家是“最幸运的天才”。

加载中...