首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

“少年py”003:用程序秒解“物不知数”

韩信点兵——多多益善。

这是一个歇后语,大家都熟知。

其实韩信点兵在数学界还有一个故事:

韩信带二千五百士兵去打仗,回营后,刘邦问士兵人数。

韩信让士兵列队:

列成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接近自然语言,非常通俗易懂,所以才会有更多的人喜欢它,使用它。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181231G0RM2N00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券