残杀战俘的数学故事
在一次战争中,64名战士被俘虏了。敌人命令他们排成一个圆圈,分别编上1、2、3、4……64的号码。然后,从1号开始残杀,接着是3号、5号……隔一个杀一个。这样转着圈杀,最后剩下一个人,这个人就是约瑟夫斯。请问:约瑟夫斯是多少号?
敌人从1号开始,隔一个杀一个,就是第一圈把奇数号码战士全杀死了。剩下32名战士需重编号,而第二圈杀死的是重新编排的奇数号码。第一圈剩下全部是偶数号2、4、6……64。因为先前64名战士已经被杀害一半,所以剩下的人是64除以2,共32个人,他们重新编的号码是1、2、3……32。而第二圈杀过之后,又把这一次编成的奇数号码的战士全都杀掉了,还剩下16个人。这样一直到最后,剩下的必然是一开始的64号,所以答案是约瑟夫斯是64号。
再把问题改一下:不让战俘站成圆圈,而排成直线,再编上号码。从1号开始,隔一个杀一个,杀过一遍之后,然后再重新编号,从新1号开始,再隔一个杀一个,问最后剩下的还是64号约瑟夫斯吗?答案是肯定的。
如果战俘人数是65人呢?这回剩下的还是约瑟夫斯。只要人数不超过128,那么最后剩下的总是约瑟夫斯。因为从1到128中间,能被整除次数最多的就是64。而敌人每次都是杀奇数号,留偶数号,所以64号总是最后被留下的人。
上一篇:有趣的斐波拉契数列
下一篇:比计算机还快的神童