中国剩余定理——韩信点兵
民间传说着一则故事——“韩信点兵”。
秦朝末年,楚汉相争。一次,韩信将1500名将士与楚王大将李锋交战。苦战一场,楚军不敌,败退回营,汉军也死伤四五百人,于是韩信整顿兵马也返回大本营。当行至一山坡,忽有后军来报,说有楚军骑兵追来。只见远方尘土飞扬,杀声震天。汉军本来已十分疲惫,这时队伍大哗。韩信兵马到坡顶,见来敌不足五百骑,便急速点兵迎敌。他命令士兵3人一排,结果多出2名;接着命令士兵5人一排,结果多出3名;他又命令士兵7人一排,结果又多出2名。韩信马上向将士们宣布:我军有1073名勇士,敌人不足五百,我们居高临下,以众击寡,一定能打败敌人。汉军本来就信服自己的统帅,这一来更相信韩信是“神仙下凡”、“神机妙算”。于是士气大振。一时间旌旗摇动,鼓声喧天,汉军步步进逼,楚军乱作一团。交战不久,楚军大败而逃。
在一千多年前的《孙子算经》中,有这样一道算术题:
“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”按照今天的话来说:一个数除以3余2,除以5余3,除以7余2,求这个数.
这样的问题,也有人称为“韩信点兵”.它形成了一类问题,也就是初等数论中解同余式.这类问题的有解条件和解的方法被称为“中国剩余定理”,这是由中国人首先提出的.
①有一个数,除以3余2,除以4余1,问这个数除以12余几?
解:除以3余2的数有:
2,5,8,11,14,17,20,23….
它们除以12的余数是:
2,5,8,11,2,5,8,11,….
除以4余1的数有:
1,5,9,13,17,21,25,29,….
它们除以12的余数是:
1,5,9,1,5,9,….
一个数除以12的余数是唯一的.上面两行余数中,只有5是共同的,因此这个数除以12的余数是5.
如果我们把①的问题改变一下,不求被12除的余数,而是求这个数.很明显,满足条件的数是很多的,它是5+12×整数,
整数可以取0,1,2,…,无穷无尽.事实上,我们首先找出5后,注意到12是3与4的最小公倍数,再加上12的整数倍,就都是满足条件的数.这样就是把“除以3余2,除以4余1”两个条件合并成“除以12余5”一个条件.《孙子算经》提出的问题有三个条件,我们可以先把两个条件合并成一个.然后再与第三个条件合并,就可找到答案.
②一个数除以3余2,除以5余3,除以7余2,求符合条件的最小数.
解:当某数被3除余1对,即写上70(因为70是5和7的倍数,是3的倍数多1),余2时即写70×2=140,这140仍是5和7的倍数,是3的倍数余2。某数被5除余1,即写上21(因为21是3和7的倍数、5的倍数余1),余2时,则写上21×2=42,余3时,则写上21×3=63。某数被7除余1时,即写上15(因为15是3和5的倍数,是7的倍数余1),余2时,则写上15×2=30。根据题意,把70×2+21×2+15×2计算出来结果。然后减去3、5、7的最小公倍数105,一直减到少于105为止,就得到了符合题目的数:
70×2+21×3+15×2-105×2=23
即此数是23。
那么韩信点的兵在1000-1500之间,应该是70×2+21×3+15×2+105×9=1073