将数字 1 到 100 相加的技巧

有一个流传很广的故事,关于 高斯,数学家中的非凡人物,他有一位懒惰的老师。这位所谓的教育家想让学生们忙碌起来以便自己打个盹;他让全班同学计算从1加到100的和。

高斯很快给出了答案:5050。这么快?老师怀疑有作弊行为,但并非如此。手动加法是傻子才做的事,高斯找到了一个绕过问题的公式:

\displaystyle{\text{Sum from 1 to n} = \frac{n(n+1)}{2}}

\displaystyle{\text{Sum from 1 to 100} = \frac{100(100+1)}{2} = (50)(101) = 5050}

让我们分享几个关于这个结果的解释,并真正直观地理解它。对于这些例子,我们将计算从1加到10,然后看看它如何应用于1到100(或任意数字)。

技巧1:配对数字

配对数字是解决这个问题的常见方法。与其将所有数字写在一列中,不如把数字绕过来,像这样:

1  2  3  4  5
10 9  8  7  6

一个有趣的模式出现了: 每列的总和是11。随着第一行增加,第二行减少,因此和保持不变。

因为1与10(我们的n)配对,所以我们可以说每列的和为(n+1)。那么我们有多少对呢?嗯,我们有2行相等的行,因此必须有n/2对。

\displaystyle{\text{Number of pairs * Sum of each pair} = (\frac{n}{2})(n+1) = \frac{n(n+1)}{2}}

这就是上面的公式。

等等——如果有奇数个数字会怎样?

啊,我很高兴你提到这一点。如果我们计算从1加到9呢?我们就没有偶数个项目可以配对了。许多解释只会给出上述解释并就此打住。但我不会。

让我们计算从1加到9,但这次不从1开始,而是从0开始计数:

0  1  2  3  4
9  8  7  6  5

通过从0开始计数,我们得到了一个“额外项”(总共10个),这样我们就有偶数行了。不过,我们的公式会略有不同。

注意每列的和是n(不像之前是n+1),因为0和9被分在一组。而且我们不是正好有2行中的n个项(总共n/2对),而是有2行中的n+1个项(总共(n+1)/2对)。如果你将这些数字代入,你会得到:

\displaystyle{\text{Number of pairs * Sum of each pair} = (\frac{n + 1}{2})(n) = \frac{n(n+1)}{2}}

这和之前的公式是一样的。我一直觉得奇怪的是,同一个公式既适用于奇数也适用于偶数——难道不会得到分数吗?是的,你会得到相同的公式,但原因不同。

技巧2:使用两行

上述方法可行,但你处理奇数和偶数的方式不同。难道没有更好的方法吗?有的。

与其将数字绕圈排列,不如将它们写成两行:

1  2  3  4  5  6  7  8  9  10
10 9  8  7  6  5  4  3  2  1

注意我们有10对,每对加起来等于10+1。

以上所有数字的总和是

\displaystyle{\text{Total = pairs * sum of each pair} = n(n + 1)}

但我们只想要一行的总和,而不是两行。因此,我们将上述公式除以2得到:

\displaystyle{\frac{n(n + 1)}{2}}

这很酷(就数字行而言)。它对奇数或偶数个项同样适用!

技巧3:构造一个矩形

我最近偶然发现了另一种解释,一种对旧配对解释的新方法。不同的解释对不同的人更有效,我倾向于更喜欢这个。

与其写出数字,不如假设我们有豆子。我们想把1个豆子加到2个豆子、3个豆子……一直到5个豆子。

x
x x
x x x
x x x x
x x x x x

当然,我们可以加到10或100个豆子,但用5个你就能明白。如何计算我们金字塔中的豆子数量?

嗯,总和显然是1 + 2 + 3 + 4 + 5。但让我们换个角度来看。假设我们镜像我们的金字塔(我用“o”表示镜像的豆子),然后将其翻倒:

x                 o      x o o o o o
x x             o o      x x o o o o
x x x         o o o  =>  x x x o o o
x x x x     o o o o      x x x x o o
x x x x x o o o o o      x x x x x o

很酷吧?如果你想知道它是否“真的”对齐,确实如此。看一下常规金字塔的底部行,有5个x(和1个o)。金字塔的下一行少1个x(总共4个)和多1个o(总共2个)来填补空隙。就像配对一样,一侧在增加,另一侧在减少。

现在来解释:我们总共有多少豆子?嗯,那只是矩形的面积。

我们有n行(我们没有改变金字塔的行数),我们的集合宽度为(n + 1)个单位,因为1个“o”与所有“x”配对。

\displaystyle{\text{Area} = \text{height} \cdot \text{width} = n(n+1)}

注意,这次我们不再关心n是奇数还是偶数——总面积公式同样适用。如果n是奇数,每行将有偶数个项(n+1)。

但当然,我们不想要总面积(x和o的数量),我们只想要x的数量。由于我们将x加倍得到o,所以x本身只是总面积的一半:

\displaystyle{\text{Number of x's} = \frac{Area}{2} = \frac{n(n + 1)}{2}}

我们又回到了原来的公式。再次强调,金字塔中x的数量 = 1 + 2 + 3 + 4 + 5,即从1到n的和。

技巧4:取平均值

我们都知道

average = sum / number of items

我们可以将其重写为

sum = average * number of items

那么让我们来计算总和。如果我们有100个数字(1…100),那么我们显然有100个项。这很容易。

为了得到平均值,注意这些数字是均匀分布的。对于每个大数字,另一端都有一个小数字。让我们看一个小集合:

1 2 3

平均值是2。2已经在中间,1和3“相互抵消”,所以它们的平均值是2。

对于偶数个项

1 2 3 4

平均值介于2和3之间——是2.5。即使我们有一个分数平均值,这也没问题——因为我们有 项目数量,当我们用平均值乘以计数时,那个丑陋的分数就会消失。

注意在这两种情况下,1 在平均值的一侧,而 N 在另一侧等距。所以,我们可以说整个集合的平均值实际上就是 1 和 n 的平均值:(1 + n)/2。

将其代入我们的公式

\displaystyle{\text{sum = average * count } = \frac{(1 + n)}{2} \cdot n = \frac{n(n + 1)}{2}}

瞧!我们有了理解公式的第四种方式。

那么这有什么用呢?

三个原因:

1) 快速累加数字对估算很有用。注意,公式展开为:

\displaystyle{\frac{n(n+1)}{2} = \frac{n^2}{2} + \frac{n}{2} }

假设你想把从 1 到 1000 的数字加起来:假设你的网站每天增加 1 个访客——1000 天后你总共有多少访客?由于 一千的平方等于一百万,我们得到 million / 2 + 1000/2 = 500,500.

2) 这种将 1 到 N 相加的概念也出现在其他地方,例如计算概率时用于 生日悖论。牢固掌握这个公式将有助于你在许多领域的理解。

3) 最重要的是,这个例子表明理解一个公式有多种方式。也许你喜欢配对法,也许你更喜欢矩形技巧,或者可能有其他适合你的解释。 不要放弃 当你无法理解时——试着寻找另一个有效的解释。数学快乐。

顺便说一下, 还有更多细节 关于这个故事的历史以及高斯可能使用的技巧。

变体

如果不是从1到n,而是从5到n呢?

从常规公式 (1 + 2 + 3 + … + n = n * (n + 1) / 2) 开始,减去你不想要的部分 (1 + 2 + 3 + 4 = 4 * (4 + 1) / 2 = 10)。

Sum for 5 + 6 + 7 + 8 + … n = [n * (n + 1) / 2] – 10

对于任意起始数 a:

Sum from a to n = [n * (n + 1) / 2] – [(a - 1) * a / 2]

我们想去除从 1 到 a-1 的所有数字。

如果是偶数呢,比如2 + 4 + 6 + 8 + … + n?

只需将常规公式加倍。要计算从 2 到 50 的偶数之和,先求 1 + 2 + 3 + 4 … + 25,然后加倍:

Sum of 2 + 4 + 6 + … + n = 2 * (1 + 2 + 3 + … + n/2) = 2 * n/2 * (n/2 + 1) / 2 = n/2 * (n/2 + 1)

所以,要得到从 2 到 50 的偶数之和,你计算 25 * (25 + 1) = 650

如果是奇数呢,比如1 + 3 + 5 + 7 + … + n?

这与偶数公式相同,只是每个数字比对应的数字少 1(我们有 1 而不是 2,3 而不是 4,以此类推)。我们取下一个最大的偶数 (n + 1),然后减去多余的 (n + 1)/2 个“-1”项:

Sum of 1 + 3 + 5 + 7 +  … + n = [(n + 1)/2 * ((n + 1)/2 + 1)] – [(n + 1) / 2]

要计算 1 + 3 + 5 + … + 13,取下一个更大的偶数(n + 1 = 14)并执行

[14/2 * (14/2 + 1)] – 7 = 7 * 8 – 7 = 56 – 7 = 49

组合:偶数和偏移

假设你想要 50 + 52 + 54 + 56 + … + 100 中的偶数。找出所有偶数

2 + 4 + 6 + … + 100 = 50 * 51

然后减去你不想要的部分

2 + 4 + 6 + … 48 = 24 * 25

因此,50 + 52 + … + 100 的和 = (50 * 51) – (24 * 25) = 1950

呼!希望这能帮到你。

Ruby 极客:你可以用以下代码验证

(50..100).select {|x| x % 2 == 0 }.inject(:+)
1950

Javascript 极客:执行这个:

[...Array(51).keys()].map(x => x + 50).filter(x => x % 2 == 0).reduce((x, y) => x + y)
1950

// Note: There are 51 numbers from 50-100, inclusive. Fencepost!

本系列其他文章

  1. 将数字 1 到 100 相加的技巧
  2. 重新思考算术(Arithmetic):可视化指南
  3. 快速洞察:除法的直观含义(Intuitive Meaning of Division)
  4. 快速洞察:减去负数
  5. 平方数(1, 4, 9, 16…)中令人惊讶的规律
  6. 模运算(Modular Arithmetic)的乐趣
  7. 学习如何计数(避免栅栏柱问题(Fencepost Problem))
  8. 数字系统的奇特入门
  9. 再看一眼素数(Prime Numbers)
  10. 黄金比例(Golden Ratio)的直观理解
  11. 数字零(Zero)的不同解释

加入 45 万月度读者

喜欢这篇文章?还有更多内容能帮你建立持久、直观的数学理解。加入通讯以获取额外内容和最新更新。