查尔斯·巴贝奇 (1791–1871) 是一位兴趣广泛的狂热数学家。他以构想计算机的想法而闻名,并独自开发了他称之为 差分机 来进行串行计算。它是一台具有一系列轴和齿轮的机械机器来进行计算,输出结果是一个打印的表格。我最近开始阅读他 1864 年的书 一位哲学家的生活片段,他在书中解释了差分机的由来。
他的机器旨在解决的问题之一与儿童玩弹珠并将其排列成渐进的金字塔形状有关,顶行有一颗弹珠,第二行有两颗,第三行有三颗,依此类推。 对于小金字塔,您可以简单地数弹珠来找到有多少个。 但巴贝奇想要创建一个自动列表或表格,其中一列显示行数,另一列显示弹珠总数。

opensource.com
他谈到的差异首先是行数中的所有连续差异(在本例中等于 1),其次是从一行到下一行添加的弹珠数量之间的差异(也为 1)。 据我所知,差分机连续地将每一新行的弹珠数量添加到之前的总数中,从而创建表格。
因此,我开始在脑海中玩弹珠。 我发现自己早上 5 点在床上醒来,在精神上摆弄和数弹珠。 让我印象深刻的一件事是,对于六行,总数为 21,对于七行,总数为 28——两者都可以被七整除。 对于八行或九行,总数可以被九整除。 随着我增加行数,这种模式再次出现。 所有这些都在我的脑海中(与此同时,我希望它停止,以便我能够重新入睡),所以它不是很系统化。
当我醒来时,我决定尝试弄清楚这是为什么,以及我是否可以预测哪些数字会显示出这种现象。 答案让我吃惊:事实证明,每个奇数行的弹珠数量都可以被该数字整除。
但我该如何证明这一点呢? 这是一个例子。 对于有七行的金字塔,首先看有六行的金字塔,底部有六颗弹珠。 创建一些行的对:第一行和第六行,第二行和第五行,第三行和第四行。 对于这三对中的每一对,总和为 7; 因此,三组对的总和为 21,如果您为下一行添加 7,它也将保持可被 7 整除。

(Greg Pittman, CC BY-SA 4.0)
您可以继续使用特定示例来执行此操作,但目标是普遍地理解这种现象。 想象一些随机的偶数行,N。 创建你的对,然后将 1 加到 N,将 2 加到 N-1,将 3 加到 N-2,依此类推。 在每种情况下,总和将为 N+1。 这些对的数量将为 N/2,因此弹珠的总数将为 N/2*(N+1),该数字可以被 N+1 整除。 为下一行添加 N+1 个弹珠也可以被 N+1 整除。

(Greg Pittman, CC BY-SA 4.0)
例如,你可以说一个有 128,948 行的金字塔将有 8,313,857,826 颗弹珠; 一个有 128,949 行的金字塔将有 8,313,986,775 颗弹珠,并且这两个总数都可以被 128,949 整除。
我不知道巴贝奇是否考虑过这一点,但即使他考虑过,他也会说这只代表了六位数数字的乘法和除法的数学问题,他想要一台机器来做这种事情。 他的确构想并开始研究 分析机,它可能可以完成这类操作。
如今,这对计算机来说是微不足道的工作,所以这里有一个 Python 脚本来在您丢失弹珠之前计算它们——只需 4 行代码。
#!/usr/bin/env python
# babbage.py
"""
Using Charles Babbage's conception of a marble-counting
operation for a regular pyramid of marbles,starting with
one at the top with each successive row having one more
marble than the row above it.
Returns total number of marbles in a pyramid of any size.
"""
MarbRows = input("Enter the number of rows of marbles: ")
MarbRows = int(MarbRows)
MarbNum = int((MarbRows)*(MarbRows+1)/2)
print ("The number of marbles is "+ str(MarbNum))
这就是巴贝奇差分机与 Python 相遇的方式。
3 条评论