曹雪辛
韩信是中国古代一位有名的军事家,民间流传着许多有关他的故事,韩信点兵便是其中最为耳熟能详的故事之一,韩信点兵的背后蕴含着怎样的奥秘?中国剩余定理对现代又有何启示呢?
韩信点兵的奥秘
秦朝末年,楚汉相争,一次,韩信率领1500名将士与楚王大将李锋交战,两军苦战一场,楚军不敌,败退回营,于是,韩信整顿兵马返回大本营,当行至一山坡时,忽有后军来报,说有楚军骑兵追来,只见远方尘土飞扬,杀声震天,于是韩信带领兵马来到坡顶,见来敌不足五百骑,便急速点兵迎敌。
韩信命令士兵3人一排,结果多出2名;接着命令士兵5人一排,结果多出3名;他又命令士兵7人一排,结果又多出2名,韩信马上向将士们宣布:“我军有1073名勇士,敌人不足五百,我们居高临下,以众击寡,一定能打败敌人,”汉军本已十分疲惫,但受到韩信的鼓舞后,队伍顿时士气大振,一时间旌旗摇动,鼓声喧天,汉军步步逼近,楚军乱作一团,交战不久,楚军大败而逃,部将好奇地问韩信:“大帅是如何迅速地算出我军人马的呢?”韩信说:“根据编队时排尾的余数算出来的。”
韩信到底是怎么算出来的呢?
这也是中国古代的一道趣味算术题,有一首四句诗隐含了解题的思路:
三人同行七十稀,五树梅花廿一枝,
七子团圆正半月,除百零五便得知,
诗里让人记住了这几个数字:3与70.5与21.7与15.还有105(也就是3、5、7的公倍数),这些数是什么意思呢?题中3人一列多2人,用2x70;5人一列多3名,用3x21;7人一列多2人,用2×15.三个乘积相加:
2×70+3×21+2×15=233
用233除以3余2.除以5余3.除以7余1.符合题中条件,但是,因为105是3、5、7的公倍数,所以233加上或减去若干个105仍符合条件,这样一来,128、338、443、548、653……都可能是答案,而韩信根据现场观察,得出了1073这个数字,
诗歌里的数字又是怎么得来的呢?
70是5和7的公倍数,除以3余1;
21是3和7的公倍数,除以5余1;
15是3和5的公倍数,除以7余1.
中国剩余定理
《孙子算经》中也有类似的问题:“今有物,不知其数,三三数之,剩二,五五数之,剩三,七七数之,剩二,问物几何?”
答曰:“二十三,”
术曰:“三三数之剩二,置一百四十,五五数之剩三,置六十三,七七数之剩二,置三十,并之,得二百三十三,以二百一十减之,即得,凡三三数之剩一,则置七十,五五数之剩一,则置二十一,七七数之剩一,则置十五,即得。”
什么意思呢?用现代语言说明这个解法就是:
首先找出能被5与7整除而被3除余1的数70.被3与7整除而被5除余1的数21.被3与5整除而被7除余1的数15.如果所求的数被3除余2.那么就取数70~2=140.140是被5与7整除而被3除余2的数,如果所求数被5除余3.那么取数21x3=63.63是被3与7整除而被5除余3的数,如果所求数被7除余2.那就取数15x2=30.30是被3与5整除而被7除余2的数。
140+63+30=233.由于63与30都能被3整除,所以233与140这两数被3除的余数相同,都是余2.同理233与63这两数被5除的余数相同,都是3.233与30被7除的余数相同,都是2.所以233是满足题目要求的一个数,105是3、5、7的公倍数,前面说过,凡是满足233加减105的整数倍的数都是符合题意的,因此依定理譯成算式解为:
70×2+21×3+15×2=233
233-105×2=23
这就是有名的“中国剩余定理”,或称“孙子定理”,和韩信点兵是一个道理,
《孙子算经》中的“物不知其数”题虽然开创了一次同余式研究的先河,但真正从完整的计算程序和理论上解决这个问题的是南宋数学家秦九韶,他在自己的著作《数学九章》中提出了一个数学方法,称之为“大衍求一术”,即现代数论中一次同余式组解法,这是中世纪世界数学的最高成就,比西方著名数学家高斯于1801年建立的同余理论早了554年,因而被西方称为“中国剩余定理”,“大衍求一术”不仅在当时处于世界领先地位,在近代数学和现代计算机领域中,也起到了重要作用,同时,在密码学研究中,现代密码的解密和保密算法都需要用到中国剩余定理。