《啊哈!灵机一动》-1776引起的兴致
模块化算术
海伦避免从1到1976的长计数的诀窍是,她意识到这个问题可以通过使用一种叫做“模运算”或“时钟运算”的理论来快速解决。
时钟算法模拟12个数字的有限算法。事实上,在基于12的模运算中,12和0是相同的。假设现在正好是12点,你想知道100小时后是什么时间,你只需要用100除以12就可以得到余数。余数等于4,表示100小时后,时钟显示4点整。我们关心的只是剩下的。数字“100”被认为等同于“4”(模12),这仅仅意味着当100除以12时,余数是4。
你知道亨利叔叔的计数方法相当于“时钟算术”吗?唯一的区别是中间的三个瓶子各代表两个数字,因为它们在两个不同的方向上被计数了两次。“8”数字在开始后到达第二个瓶子,然后另一个循环再次开始。因此,这个过程显示了一个包含8个模块的算术过程。
海伦只确认了1976年的等值(8的形式)。换句话说,1976年除以8后的余数为零。在模8的算术中,8=0(模8)。因此,1976年的计数必须在计数开始的第二个瓶子处停止。
如果亨利叔叔有一个很大的数字,比如12345678987654321,如果你想知道他最后停在哪里,你必须把整个数字除以8吗?事实上,不是。因为1000=0(模8),你只需要把最后3个数字321除以8。321之后的余数除以8等于1,这意味着12345678987654321=1(模8)。所以计数必须在第一瓶结束。
为了改变瓶子的数量,你可以用偶数模块设计许多有限的算术模型。如果计数瓶子的方式通常是从左到右计数,那么你可以建立一个有限的算术模型,以任何奇数或偶数为模块。
“约瑟夫问题”是一个著名的问题,它包括对物体的周期性计数,因为它是基于一个名叫约瑟夫的古罗马故事。有许多类似这个问题的作品。下面是一个有趣的新外国故事。
从前,一个富有的国王有一个美丽的女儿,名叫约瑟芬。数百名年轻人在追她。最后,每个人都被排除在外,除了她选择的10个人。
几个月过去了,约瑟芬还没有下定决心。国王很生气。他说,“宝贝,下个月你就17岁了。所有公主在这个年龄之前结婚是我们的习俗。”
她回答说:“爸爸,但是我还没有最终决定我是否最喜欢乔治。”
"既然如此,今天我们必须通过惯例来解决这个问题."
接下来,国王解释了古代仪式是如何进行的。他说:“十个人站成一圈。你可以选择任何你喜欢的人。然后你开始沿着圆圈顺时针数,数到你17岁。第十七个人必须退出圈子。我们给他100枚金币作为补偿,然后送他回家。”
“他走后,你会从1数到17。这一次,从退出者的下一个数字开始,当数到17时,第17个人将像以前一样被排除。照此继续做下去,永远清点剩余的人,直到最后一个。他是想娶你的人。”
约瑟芬皱着眉头说,“爸爸,我还不确定,我要用10枚金币来练习吗?”
国王同意了。约瑟芬把10枚金币放在一个圆圈里,开始在圆圈里数数。去掉每一个17号,直到最后一个剩下。国王一直等到他的女儿完全掌握了这个过程。
十个求婚者被带到了宫殿。他们围着约瑟芬站成一圈。她毫不含糊地从帕西法数起。很快,除了她暗恋的乔治,所有人都被排除在外。约瑟芬有什么诀窍让她最终能轻松找到乔治的第一个号码?
约瑟芬的最佳计划是。当她数实验用的金币时,她记得最后剩下的金币是她数的第三枚,所以当她数人数时,她数的是能把乔治排在第三位的那枚。
约瑟芬问题的一般原理可以用一副扑克牌中的13张黑桃来说明。你能把这些卡片按顺序排列,并按如下方式进行约瑟芬计数吗?
在开始计数时,一只手拿着有13张面朝下的扑克牌的盒子,上面的牌叫做1,当打开时,它是A。把A放在桌子上,然后数1和2。把第一张牌放在盒子下面,把第二张牌倒过来放在桌子上是第二张。然后数1,2,3,把头两张牌放在盒子下面,把第三张牌翻过来放在桌子上,这是第三张黑桃。继续这样,从盒子顶部一次只拿一张卡片,然后依次拿第二张卡片(类似于约瑟芬的循环计数),直到你把放在桌子上的13张卡片翻转过来,这正好是从A到k的顺序
以下是这些卡片的排列顺序。从上到下,这样排列:a,8,2,5,10,3,q,j,9,4,7,6,k。
如果你认为设计这样一个序列会浪费很多人的时间,那么有一个简单的方法可以得到序列。许多从事这类研究的专家花了很多时间才意识到简化问题的启示。