韩信点兵——多多益善。
这是一个歇后语,大家都熟知。
其实韩信点兵在数学界还有一个故事:
韩信带二千五百士兵去打仗,回营后,刘邦问士兵人数。
韩信让士兵列队:
列成5行纵队,末行1人;
列成6行纵队,末行6人;
列成7行纵队,末行4人;
列成11行纵队,末行10人;
韩信立即回答道2111人。
刘邦惊为天人!
韩信立即回答出了这个数据,不知真假。
但是能通过这个方法快速计算出士兵人数,这还是很了不起。
这个跟中国的剩余定理有关系,也可以通俗的说成——物不知数,源自《孙子算经》。
孙子算经有个题:
假如有一堆物品,也不知道多少个,
每排3个的数,最后剩2个,
每排5个的数,最后剩3个,
每排7个的数,最后剩2个。
问物品有几个?答曰:23
(ps:这人真固执,难道不能一个一个数吗?)
上面的数都比较小,如果把问题放大。
一个百万以内的数:
如果除以11余4,除以13余3,除以17余6,除以19余10,除以23余12,
那这个数可能是多少?
一个一个数试,我给你一个小时~
现在我们就可以用Python写几行代码马上解出来:
按下F5键,运行这段简单的代码,结果如下所示:
102040满足条件。
这么简单的代码你有没有看懂呢?
简单解释:
for i in range (1000000):
表示i是1000000以内的数,i可以等于0,1,2,3,……直到999999
if i %11==4:
表示如果 i 除以11的余数是4
小细节:
(1) %表示取余
(2) 双等号“==”表示等于,与单个等号“=”不同,单个等号“=”表示赋值
(3) 加冒号“:”,下一句自动缩进4个空格,表示下面的程序在满足上面程序的条件下运行。
看到代码了吗,非常容易理解,就像用英语翻译中文一样。
就因为Python接近自然语言,非常通俗易懂,所以才会有更多的人喜欢它,使用它。
领取专属 10元无门槛券
私享最新 技术干货