韩信点兵计算公式与代码
问题描述:
淮安民间传说着一则故事——“韩信点兵”,其次有成语“韩信点兵,多多益善”。
韩信带1500名兵士打仗,战死四五百人,站3人一排,多出2人;站5人一排,多出4人;站7人一排,多出6人。韩信很快说出人数:1049。
问题重述:
上述问题使用数学语言其实可以描述如下:
假设一个数为X,则1000
X%3 = 2
X%5 = 4
X%7 = 6
让求X。
问题解法:
其实韩信点兵问题,在古代已经有了解法。《孙子算经》有几句乘法口诀:三人同行七十稀, 五树梅花廿一枝, 七子团圆正半月, 除百零五便得知。
这句话的意思就是用被除数是3的余数(2)与70相乘,被除数是5的余数(4)与21相乘,被除数是7的余数(6)与15相乘,最后如果没在范围之内,就加减若干次105就可以得到答案。
所以算法是这样的:2*70+4*21+6*15=314人
314+105+105+105+105+105+105+105=1049人。
其中105是三个被除数的公倍数,即3*5*7=105,那么70,21,15是怎么来的呢?
现代人们解决这个问题用的是中国剩余定理。定理内容可以上网看到,这里不再多说,直接上公式。
上面算式