韩信点兵是一个有趣的猜数游戏。如果你随便拿一把蚕豆(数目约在100粒左右),先3粒3粒地数,直到不满3粒时,把余数记下来;第二次再5粒5粒地数,最后把余数记下来;第三次是7粒一数,把余数记下来。然后根据每次的余数,就可以知道你原来拿了多少粒蚕豆了。不信的话,你还可以试验一下。例如,假如3粒一数余1粒,5粒一数余2粒,7粒一数余2粒,那么,原有蚕豆有多少粒呢? 这类题目看起来是很难计算的,可是我国古时候却流传着一种算法,名称也很多,宋朝周密叫它“鬼谷算”,又名“隔墙算”;杨辉叫它“剪管术”;而比较通行的名称是“韩信点兵”。最初记述这类算法的是一本名叫《孙子算经》的书,后来在宋朝经过数学家秦九韶的推广,又发现了一种算法,叫做“大衍求一术”。这在数学史上是极有名的问题,外国人一般把它称为“中国剩余定理”。至于它的算法,在《孙子算经》上就已经有了说明,而且后来还流传着这么一道歌诀: 三人同行七十稀, 五树梅花廿一枝, 七子团圆正半月, 除百零五便得知。 这就是韩信点兵的计算方法,它的意思是:凡是用3个一数剩下的余数,将它用70去乘(因为70是5与7的倍数,而又是以3去除余1的数);5个一数剩下的余数,将它用21去乘(因为21是3与7的倍数,又是以5去除余1的数);7个一数剩下的余数,将它用15去乘(因为15是3与5的倍数,又是以7去除余1的数),将这些数加起来,若超过105,就减掉105,如果剩下来的数目还是比105大,就再减去105,直到得数比105小为止。这样,所得的数就是原来的数了。根据这个道理,你可以很容易地把前面的五个题目列成算式: 1×70+2×21+2×15-105 =142-105 =37 因此,你可以知道,原来这一堆蚕豆有37粒。 1900年,德国大数学家大卫·希尔伯特归纳了当时世界上尚未解决的最困难的23个难题。后来,其中的第十问题在70年代被解决了,这是近代数学的五个重大成就。据证明人说,在解决问题的过程中,他是受到了“中国剩余定理”的启发的。
#include<stdio.h>
int main(void)
{
int a, b, c, i;
while(scanf("%d%d%d", &a, &b, &c)!=EOF)
{
for(i=7+c; i<=100; i++)
{
if(i%3==a && i%5==b && i%7==c)
{
printf("%d\n", i);
break;
}
}
}
return 0;
}
我想看完这个就能整体的明白韩信点兵这个算法了,我只是进行了总结,都是找到的,呵呵
http://zhidao.baidu.com/question/95184845.html
分享到:
相关推荐
求解“韩信点兵”问题的算法研究.这类问题和解法, 一般称它为孙子定理, 外国人称其为“ 中国余数定理” , 它是我国闻名 于世的古代数学定理。 这一工作不仅在数学历史上占有地位, 而且这类阔题的解法的原则在 ...
c# 韩信点兵算法的实现
这是一款利用visual C++编写的求解韩信点兵的程序,简单易懂。
C#韩信点兵算法实例源代码,韩信点兵是一道古代数学题,内容是:韩信带兵不足百人,三人一行排列多一个,七人一行排列少两个,五人一行排列正好。
韩信点兵python程序代码
输入3个非负整数a,b,c ,表示每种队形排尾的人数(a,b,c), 输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100
韩信点兵韩信点兵韩信点兵韩信点兵韩信点兵韩信点兵
C#韩信点兵算法实例
小学数学数学故事韩信点兵
韩信点兵: 韩信有一队兵,想知道有几个,便让士兵如下排列: 1、5人一列,余1人;2、6人一列,余5人;3、7人一列,余4人;4、11人一列,余10人,求韩信共有多少士兵?
韩信点兵的计算方法,又被称为“孙子定理”、“鬼谷算”、“隔墙算”、“剪管术”、“秦王暗点兵”、“物不知数”等,它是中国古代数学家的一项重大创造,在世界数学史上也有重要的地位。在西方数学史上,被称为...
韩信点兵--剩余定理.pdf
韩信曾有一次带 1500 名兵士打仗,战死四五百人。这是,前方来报,说敌军率 500 人前来进攻。为了统计剩余士兵的个数,韩信令士兵 3 人一排,多出 2 人;5 人一排,多出 3 人;7 人一排,多出 2 人。韩信据此很快说...
【基础算法】-java韩信点兵 public class HanXin { public static void main(String[] args) { int num=HanXin.peopleNum(1,1,5,4,10); System.out.println(num); num = HanXin.peoplrNum_For(1,1,5,4,10); ...
韩信点兵
韩信点兵 -----------中国剩余定理
主要在Code Blocks运行,应用了嵌套循环(枚举),达到了运算的功能。
韩信点兵python程序代码
韩信点兵算法,java程序,自己做的作业,java小程序,很久以前的作业,希望可以帮到刚刚学习java的学弟学妹们