欧拉 在柏林科学院担任“物理数学所”所长期间,一天,他收到了一封来自意大利都灵的信。寄信的是一位年轻人,名叫 约瑟夫·路易·拉格朗日(Joseph-Louis Lagrange)。拉格朗日在信中写出了一个 等周问题 的最新解法,希望请欧拉评价。
欧拉十分欣赏拉格朗日的智慧,不但鼓励这位年轻人发表了这篇研究成果,还推荐他为柏林科学院的通讯院士。而此时拉格朗日只有 20 岁,他一跃成为当时世界上最年轻的杰出数学家。
今天这集故事的主角就是拉格朗日,他是继欧拉之后 18 世纪最伟大的数学家之一。拉格朗日受到欧拉的亲切关怀、鼓舞,一生致力于科学研究,他在数学、物理、天文学等多个领域做出了划时代的贡献。以拉格朗日名字命名的定理、公式、方法,经常出现在大学数学、物理学、工程学甚至经济学的教科书中。
今天我们讲的,就是拉格朗日年轻时证明的一个著名猜想:一个自然数,总能写成四个“平方数”的和。
这个猜想最早是由法国著名数学爱好者费马提出的,但是经过一个多世纪,都没有人能证明它。
所谓“平方数”,就是像 2 乘 2 得 4,3 乘 3 得 9,4 乘 4 得 16 这样,由某个整数自己乘自己,所得到的乘积。
我们可以写出 100 以内的所有“平方数”:
0 = 0 x 0
1 = 1 x 1
4 = 2 x 2
9 = 3 x 3
16 = 4 x 4
25 = 5 x 5
36 = 6 x 6
49 = 7 x 7
64 = 8 x 8
81 = 9 x 9
100 = 10 x 10
…
费马猜测,任何一个整数,只要不是负数,都可以写成不超过 4 个“平方数”连加的和。
例如 46 = 36 + 9 + 1 + 0
57 = 36 + 16 + 4 + 1
666 = 289 + 144 + 169 + 64
…
这种关于数字本身性质的研究领域,叫做“数论”。虽然证明它难倒了一个世纪的数学家,但我们今天的小学生却可以用 Scratch 编一段程序,让计算机把任何一个自然数分解成 4 个“平方数”的和。是不是也很有挑战呢?

代码量:30 块积木
舞台背景:随意
用到的变量:我的变量、i
用到的列表:依次建立 2 个列表:“平方数”、“四数字”
角色:Lagrange.svg,点这里下载。解压后上传到 Scratch 作品中。
代码:
Lagrange:

解释:
当绿旗子被点击后,程序先提示输入要分解的数字。
然后紧接着的第一段“重复执行”,是列出所有不大于输入数字的“平方数”。方法就是重复将 i * i 加入到“平方数”列表中,同时每次给 i 增加 1。
第二段“重复执行”,是重复调用“猜一次”子程序。子程序通过广播“猜一次”消息触发。直到猜中了答案,即 i = 输入的数字,才结束循环。
而在每一次子程序中,都会随机抽取 4 个平方数,把它们加起来,结果保存在变量 i 里(通过每次让 i 增加 抽到的平方数 来实现)。
运行:
通过顶部“编辑”菜单——“打开加速模式”,可以瞬间算出答案(如果你输入的数字不是很大的话)。