我国汉代有位大将,名叫韩信。他每次集合部队,只要求部下先后按l~3、1~5、1~7报数,然后再报告一下各队每次报数的余数,他就知道到了多少人。他的这种巧妙算法,人们称为“鬼谷算”,也叫“隔墙算”,或称为“韩信点兵”,外国人还称它为“中国余数定理”。即有一个数,用3除余2,用5除余3,用7除余2,请问0~1000中这样的数有哪些?运行效果如图3-29所示。
■ 图3-29  韩信点兵运行效果
源码:
print
(
"0~1000中用3除余2,用5除余3,用7除余2的数有:"
)

for
 n in
range
(
1001
):

if
 (n %
3
 ==
2and
 n %
5
 ==
3and
 n %
7
 ==
2
):
print
(n,end=
' '
)
01
典故背景
大家小时候有没有听过一首歌谣:
“三人同行七十稀,五树梅花二十一,七子团圆正半月,除百零五便得知。”
实际上这个歌谣是一个古老数学题的解法。
1
孙子算经
在数学典籍《孙子算经》中,有许多著名的数学问题。其中最有名的是“鸡兔同笼”问题。除此之外,另一个流传很广的经典问题,被后人称为“物不知数”问题:
“有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?”
意思是说:有一堆物体不知道有几个。如果三个三个分组,最后会剩下2个;如果五个五个分组,最后会剩下3个;如果七个七个分组,最后会剩下2个。问这些物体一共有几个?
后来,人们为了让这个问题更具体化,就把它改编成“韩信点兵”问题。
2
韩信点兵
秦朝末年,楚汉相争。一次,韩信将1500名将士与楚王大将李锋交战。苦战一场,楚军不敌,败退回营,汉军也死伤四五百人,于是韩信整顿兵马也返回大本营。当行至一山坡,忽有后军来报,说有楚军骑兵追来。只见远方尘土飞扬,杀声震天。汉军本来已十分疲惫,这时队伍大哗。韩信兵马到坡顶,见来敌不足五百骑,便急速点兵迎敌。他命令士兵3人一排,结果多出2名;接着命令士兵5人一排,结果多出3名;他又命令士兵7人一排,结果又多出2名。韩信马上向将士们宣布:我军有1073名勇士,敌人不足五百,我们居高临下,以众击寡,一定能打败敌人。汉军本来就信服自己的统帅,这一来更相信韩信是神仙下凡、神机妙算。于是士气大振。一时间旌旗摇动,鼓声喧天,汉军步步进逼,楚军乱作一团。交战不久,楚军大败而逃。
3
中国剩余定理
余数问题是一个重要的数学问题,是计算机密码学的基石之一。世界著名的数学家欧拉、高斯等人,都曾经研究过这个问题。中国古代的先贤在这方面取得了丰硕的成果。“韩信点兵”问题只是一个例子,这样的问题有更加普遍和系统化的表示方法。而这个方法,就被世界称为“中国剩余定理”,是我国为数不多的获得世界公认的古代数学成就之一。
本书中大量的案例都采用了带有思政元素的案例。例如“杨辉三角”“中国余数定理”“通过jieba库将文件‘2020政府报告.txt’进行文本分词处理”等。
02
参考教材
《Python编程从入门到实战-轻松过二级》
ISBN:978-7-302-57296-1
作者:江红、余青松

定价:59.80元
当当网自营图书大促
>> 满100减50  <<
(可叠加使用)
添加优惠券,“实付满200减40”
即花160买400的书
优惠码数量有限,还不赶紧薅羊毛!
怎么BUY ?
使用范围:科技品类
200-40优惠码:
2PPR4Z 
使用渠道:当当小程序或当当APP
使用时间:6月16日~6月20日
使用方法:
·步骤一,挑选心仪的图书至购物车点击结算
·步骤二,点击优惠券/码处
·步骤三,输入优惠码 2PPR4Z (注意要大写)
需要注意的是:优惠码全场自营图书可用(教材、考试类除外)

选书太纠结?推荐几本必买的Python好书
助你囤的疯狂、读的畅快,绝不后悔!
推荐书单
扫码,优惠购买全套Python图书
03
精彩推荐
继续阅读
阅读原文