韩信点兵问题及其算法(韩信点兵问题)
1、中国剩余定理 民间传说着一则故事——“韩信点兵”。
2、秦朝末年,楚汉相争。
3、一次,韩信将1500名将士与楚王大将李锋交战。
4、苦战一场,楚军不敌,败退回营,汉军也死伤四五百人,于是韩信整顿兵马也返回大本营。
5、当行至一山坡,忽有后军来报,说有楚军骑兵追来。
6、只见远方尘土飞扬,杀声震天。
7、汉军本来已十分疲惫,这时队伍大哗。
8、韩信兵马到坡顶,见来敌不足五百骑,便急速点兵迎敌。
9、他命令士兵3人一排,结果多出2名;接着命令士兵5人一排,结果多出3名;他又命令士兵7人一排,结果又多出2名。
10、韩信马上向将士们宣布:我军有1073名勇士,敌人不足五百,我们居高临下,以众击寡,一定能打败敌人。
11、汉军本来就信服自己的统帅,这一来更相信韩信是“神仙下凡”、“神机妙算”。
12、于是士气大振。
13、一时间旌旗摇动,鼓声喧天,汉军步步进逼,楚军乱作一团。
14、交战不久,楚军大败而逃。
15、在一千多年前的《孙子算经》中,有这样一道算术题: “今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”按照今天的话来说:一个数除以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余2的数: 2, 5, 8, 11, 14, 17, 20, 23, 26,…, 再列出除以5余3的数: 3, 8, 13, 18, 23, 28,…. 这两列数中,首先出现的公共数是8.3与5的最小公倍数是15.两个条件合并成一个就是8+15×整数,列出这一串数是8, 23, 38,…,再列出除以7余2的数 2, 9, 16, 23, 30,…, 就得出符合题目条件的最小数是23. 事实上,我们已把题目中三个条件合并成一个:被105除余23. 那么韩信点的兵在1000-1500之间,应该是105×10+23=1073人首先找出能被5与7整除而被3除余1的数70,被3与7整除而被5除余1的数21,被3与5整除而被7除余1的数15。
16、所求数被3除余2,则取数70×2=140,140是被5与7整除而被3除余2的数。
17、所求数被5除余3,则取数21×3=63,63是被3与7整除而被5除余3的数。
18、所求数被7除余2,则取数15×2=30,30是被3与5整除而被7除余2的数。
19、又,140+63+30=233,由于63与30都能被3整除,故233与140这两数被3除的余数相同,都是余2,同理233与63这两数被5除的余数相同,都是3,233与30被7除的余数相同,都是2。
20、所以233是满足题目要求的一个数。
21、而3、5、7的最小公倍数是105,故233加减105的整数倍后被3、5、7除的余数不会变,从而所得的数都能满足题目的要求。
22、由于所求仅是一小队士兵的人数,这意味着人数不超过100,所以用233减去105的2倍得23即是所求。
![](http://yyk.iask.sina.com.cn/pic/fimg/160992412636476973817.jpg)