“韩信点兵”算法之Excel公式解题

来源:百度文库 编辑:神马文学网 时间:2024/10/04 05:19:49

什么是“韩信点兵”算法?

一日,汉高祖刘邦曾问大将韩信:“你看我能带多少兵?”韩信斜了刘邦一眼说:“你顶多能带十万兵吧!”汉高祖心中有三分不悦,心想:你竟敢小看我!“那你呢?”韩信傲气十足地说:“我呀,当然是多多益善啰!”刘邦心中又添了三分不高兴,勉强说:“将军如此大才,我很佩服。现在,我有一个小小的问题向将军请教,凭将军的大才,答起来一定不费吹灰之力的。”韩信满不在乎地说:“可以可以。”刘邦狡黠地一笑,传令叫来一小队士兵隔墙站队,刘邦发令:“每三人站成一排。”队站好后,小队长进来报告:“最后一排只有二人。”“刘邦又传令:“每五人站成一排。”小队长报告:“最后一排只有三人。”刘邦再传令:“每七人站成一排。”小队长报告:“最后一排只有二人。”刘邦转脸问韩信:“敢问将军,这队士兵有多少人?”韩信脱口而出:“二十三人。”刘邦大惊,心中的不快已增至十分,心想:“此人本事太大,我得想法找个岔子把他杀掉,免生后患。”

一面则佯装笑脸夸了几句,并问:“你是怎样算的?”韩信说:“臣幼得黄石公传授《孙子算经》,这孙子乃鬼谷子的弟子,算经中载有此题之算法,口诀是: 三人同行七十稀,五树梅花开一枝,七子团圆正月半, 除百零五便得知。

韩信点兵”又称“鬼谷算”,“隔墙算”,“剪管术”,“神奇妙算”等等,题目与解法都载于我国古代重要的数学著作《孙子算经》中。宋朝的数学家秦九韶把这个问题推广,并把解法称之为“大衍求一术”,这个解法传到西方后,被称为“孙子定理”或“中国剩余定理”。而韩信,则终于被刘邦的妻子吕后诛杀于未央宫。

刘邦出的这道题,可用现代语言这样表述:“一个正整数,被3除时余2,被5除时余3,被7除时余2,如果这数不超过100,求这个数。”

3 2 5 3 7 2 除数 余数

解题过程演算?

据《孙子算经》中给出这类问题的解法:“三三数之剩二,则置一百四十;五五数之剩三,置六十三;七七数之剩二,置三十;并之得二百三十三,以二百一十减之,即得。凡三三数之剩一,则置七十;五五数之剩一,则置二十一;七七数之剩一,则置十五,一百六以上,以一百五减之,即得。”

译成国语即是:

能被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,则取数21×3=63,63是被3与7整除而被5除余3的数。
所求数被7除余2,则取数15×2=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是满足题目要求的一个数。

而3、5、7的最小公倍数是105,故233减105的整数倍后被3、5、7除的余数不会变,从而所得的数都能满足题目的要求。由于所求仅是一小队士兵的人数,这意味着人数不超过100,所以用233减去105的2倍得23即是所求。

根据以上概述运用Excel公式制成一通用的“韩信点兵”计算器。如下:

3 2 23 23 5 3 答案1 答案2 7 2 除数 余数    

3 1 22 22 5 2 答案1 答案2 7 1 除数 余数    

3 2 89 89 5 4 答案1 答案2 7 5 除数 余数    

答案一公式(常规解法 数组公式)

=MIN(IF((MOD(ROW($1:$95)*A$1+B$1,A$2)=B$2)*(MOD(ROW($1:$95)*A$1+B$1,A$3)=B$3),ROW($1:$95)*A$1+B$1,9E+307))

答案二公式(韩信点兵思路解法)

=MOD(B1*A2*A3*2+B2*A1*A3+B3*A1*A2,A1*A2*A3)

=MOD(70*B1+21*B2+15*B3,105)

答案一公式科学性强些,当结果出现9E+307时,证明所求数不存在。但答案二公式同样会给出错误结果,说明当时韩信这个思路并非通用。如:

3 2 9E+307 14 5 4 答案1 答案2 7 7 除数 余数    


=MOD(14,3) =2 =MOD(14,5) =4 =MOD(14,7) =0

最后,附上EXCEL版韩信点兵计算器下载,供学习参考。【点此下载