如果宇宙的答案是42,那么问题是什么? | 袁岚峰

众所周知,宇宙的答案是……42。这是著名科幻小说《银河系漫游指南》中的梗。有趣的是,2021年有人把42变成了一个数学问题的梗。他们找到了三个整数,使得它们的立方和等于42。

500

500

想想看,这会是三个什么样的数?稍微尝试一下,就会发现它们不可能都是正整数。因为4的立方已经是64了,超过42,而1、2和3的立方分别是1、8和27,它们无论怎么组合都无法得出42。所以这三个数里肯定有负数。最终的解是什么呢?

500

8 0435 7581 4581 7515^3 + 1 2602 1232 9733 5631^3 + (-8 0538 7388 1207 5974)^3 = 42

500

这是三个17位数!也就是说,它们的量级是亿亿。大家如果有怀疑,可以用计算器验证一下。

500

其实仔细看一下,会发现第一个数和第三个数都是8亿亿多,只不过一个是正的,一个是负的。两者相加会在很大程度上抵消,剩下的大约是1亿亿的立方。也许你感觉有点奇怪,但想一想8^3 = 512,8亿亿的立方是1亿亿的立方的512倍,就可以理解了。神奇的是,这么三个巨大的数,互相抵消一通之后,居然剩下了一个小小的42。

500

500

真正的问题是,如何找到这个令人目瞪口呆的解?我的科大师兄、曾任中国科学院半导体研究所研究员、现任浙江大学物理学院教授的姬扬老师,在我的科普平台“风云之声”发了一篇文章(如果宇宙的答案是42,那么问题是什么? | 姬扬),解读了这个宇宙级的数学问题。

500

500

首先来琢磨一下背景。三个整数的立方和能不能等于0?答案是不可能。因为有费马大定理:对于任何大于2的自然数n,x^n + y^n = z^n都没有整数解。完整的费马大定理要到1995年才被英国数学家安德鲁·怀尔斯(Andrew Wiles)证明,但n = 3的特例早在1753年就被欧拉证明了。

500

500

500

500

既然三个整数的立方和不可能等于0,那么它可以等于什么呢?也就是说,对于什么样的整数k,x^3 + y^3 + z^3 = k有整数解?

500

一个比较容易得到的结论是,如果k除以9余正负4,也就是说余4或者余5(因为除以9余5和余-4是一回事),就没有整数解。对它的证明分为两步。

500

第一步,一个整数的立方除以9的余数只能是0或者正负1。

为什么呢?因为任何一个整数都可以写成3n或3n + 1或3n - 1,其中n是整数。

500

(3n)^3 = 27 n^3,它显然可以被9整除,即余数为0。

500

(3n + 1)^3 = (3n)^3 + 3 (3n)^2 + 3 (3n) + 1,前面几项都能被9整除,最后剩下个1,所以它除以9余1。

500

同样的道理,容易证明(3n - 1)^3除以9余-1。

500

有且只有这三种情况,所以一个整数的立方除以9的余数只能是0或者正负1。

第二步,三个整数的立方和除以9,余数就只能是三个0和正负1的组合。显然,它只能出现在-3到3的区间里。所以余数为正负4是不可能的,因为它们无论作为正数还是负数都超出了这个区间。证毕。

500

这个定理帮我们排除了很多情况,例如k = 13、14或者22、23,x^3 + y^3 + z^3 = k就没有整数解。但对于其他的k,还是有很多方程不知道有没有整数解。在小于100的k当中,直到2018年,还有两个数搞不清有没有整数解:33和42。

500

500

然后,有牛人出现了。2019年,英国数学家、布里斯托大学的安德鲁·布克尔(Andrew R. Booker)发表文章(https://link.springer.com/article/10.1007/s40993-019-0162-1),找到了k = 33的解。2021年,安德鲁·布克尔又和美国数学家、MIT的安德鲁·萨瑟兰(Andrew V. Sutherland)合作发表文章(https://www.pnas.org/doi/10.1073/pnas.2022377118),找到了k = 42的解。为了用上“宇宙答案42”这个梗,他们在文章的开头就引用了《银河系漫游指南》里的话:“老实说,我认为问题在于,你从来都不知道问题是什么。”

500

500

500

 

他们是怎么做的呢?肯定不是蛮力搜索,那样再强的计算机也承担不起。他们发明了一些巧妙的算法,然后再去搜索。这些算法用到了大量高等的数学,我和姬扬老师都没有完全明白。但它的开始部分比较简单,中学水平就可以理解。所以,姬扬老师兴致勃勃地向大家介绍了这些算法。33的算法稍微简单一点,我们主要介绍它。

500

500

500

实际上,k = 33对应的答案是

8866 1289 7528 7528^3 + (-8778 4054 4286 2239) ^3 + (-2736 1114 6880 7040) ^3 = 33

500

三个整数里有两个是负的,一个是正的,这跟前面k = 42的解里两正一负不同。利用这个后见之明,我们把问题改写成:

寻找三个正整数x > y > z,使得x^3 - y^3 = z^3 + 33。

500

你也许想问,凭什么一上来就做这个假设?如果解是两正一负怎么办?回答是,那相当于把等式最后的+ 33变成- 33,用同样的方法再做一遍就是了,计算量最多加倍。所以,下面我们只演示+ 33的情况。

500

还有一点细节是,当我们说寻找三个正整数x > y > z时,没有考虑三个数里有两个相等的情况。因为很容易可以验证,无论哪两个数相等都不可能得到解。

500

好,下面是关键的变形:

z^3 + 33 = x^3 - y^3 = (x - y) (x^2 + xy + y^2) 

= (x - y) [1/4 (x - y)^2 + 3/4 (x + y)^2]

令d = x - y,s = x + y,就可以改写为:

(z^3 + 33) / d = 1/4 d^2 + 3/4 s^2

500

等式右边是个整数,所以d必然是z^3 + 33的因子。我们再想办法把右边变成只有s^2,即:

[4 (z^3 + 33) - d^3] / (3d) = s^2

右边是一个平方数,所以左边也必须是平方数。

下面我们就可以来搜索了,搜索的对象就是正整数z。选择一个z的上限B,比如说B = 10^16即一亿亿。然后按照如下流程计算,就可以找到答案。

第一步,选择一个正整数z < B。

第二步,计算z^3 + 33。

第三步,寻找z^3 + 33的因子d。如果找到了因子,就继续进行第四步。如果找不到因子,或者找不到新的因子,就返回第一步,选择一个新的正整数z。

第四步,在找到因子d的情况下,计算[4 (z^3 + 33) - d^3] / (3d)。我们的目标,是希望它是个平方数。

第五步,检查它是不是某个整数s的平方。

假如是平方数,搜索就成功了,我们得到x = (s + d) / 2,y = (s - d) /2。

假如不是平方数,就回到第三步,再寻找z^3 + 33的下一个因子。

500

500

事实上,这只是算法的初步框架。如果真要这么做,计算量会大得惊人,因为因数分解的计算量很大,甚至判断一个数是不是平方数的计算量也很大。为什么这些步骤的计算量很大,是计算数学的专业领域,我们在这里就不叙述了。为了绕过这些障碍,他们又引进了很多巧妙的算法,证明了很多引理。

来给大家看几页论文原文,感受一下这画风。看不懂不要紧,只要明白这类研究的关键是减少计算量,你的知识水平就超过了90%的人。

500

500

500

500

 

例如这里说,在|z| ≤ B的范围内搜索时,计算量大约正比于B乘以B的对数的对数再乘以B的对数的对数的对数。而如果不做这么多巧妙处理,计算量就会正比于B^2。

只要知道,B的对数比B增长得慢得多,B越大,log B跟它相比就越小,就会理解,这是一个巨大的节约。大致可以认为,B (log log B) (log log log B)基本就约等于B。因此,这个节约的倍数大致就是B。

500

取B为一亿亿,安德鲁·布克尔在布里斯托大学的32核与64核计算机集群上做了计算,找到了k = 33的解,计算量大约是8个核年(core-years)。假如不做算法优化,计算量就会是8亿亿核年了!那算到太阳爆炸都算不完。

500

500

500

实际上,他们发明这么复杂的算法,并不只是为了处理33和42这两个特殊问题。在这背后还有个更大的背景。

前面我们已经知道,x^3 + y^3 + z^3 = k在k = 0时没有整数解(费马大定理),在k除以9余正负4时也没有整数解。那么对于其他的k呢?

500

1953年,立陶宛裔美国数学家路易斯·莫德尔(Louis Joel Mordell,1888 - 1972)提出一个问题:对于k = 3,立刻就可以看出它有一个解x = y = z = 1,仔细再看看还可以找到一个解x = y = 4,z = -5(因为64 + 64 - 125 = 3),那么好,请问还有没有其他的解?

500

1992年,英国数学家罗杰·希斯-布朗(Roger Heath-Brown)提出一个猜想:对于所有的除以9不余正负4的正整数k,也就是说对那些可能有解的k,x^3 + y^3 + z^3 = k都存在无穷多个整数解。这个猜想可不得了,它意味着k = 3和33和42等等不仅有解,而且有无穷多个解。

500

安德鲁·布克尔和安德鲁·萨瑟兰的贡献在于,不仅找到了此前不知道的k = 33和42的解,而且找到了k = 3的新解。是什么呢?是下面这个长得惊人的式子:

500

5 6993 6821 2219 6238 0720^3 + (−5 6993 6821 1135 6349 3509)^3 + (−47 2715 4934 5332 7032)^3 = 3

仔细看看,它涉及的量级是10^20即万亿亿,比k = 42的解还高四个量级!继续扩大搜索范围,会不会找到更多的解?不知道,但至少证明了k = 3的解不只是(1, 1, 1)和(4, 4, -5)这两个。

500

500

500

因此,虽然我们还不能证明希斯-布朗的猜想,但至少对它提供了强有力的支持。数论的魅力就在于此,一个问题的表述可能非常简单,但对它的解却可能复杂得吓人。

500

500

下面再来给大家举一个例子(【新年特刊】史上最贱的数学题)。有一段时间,经常有人传这样的图片。

500

95%的人解不出这道题!

苹果/ (香蕉 + 菠萝) + 香蕉 / (苹果 + 菠萝) + 菠萝 / (苹果 + 香蕉) = 4

你能找到苹果、香蕉和菠萝的正整数解吗?

500

乍看起来,这好像是个很简单的题目,苹果、香蕉和菠萝给人一种幼儿园小朋友的感觉。把它翻译成数学语言,就是对于方程

a / (b + c) + b / (a + c) + c / (a + b) = 4

寻找它的正整数解。

500

500

然而如果你真的打算用心算或手算把它解出来,你就完蛋了。这道题不只是95%的人解不出来,而且是99.99%的人都解不出来。它最简单的正整数解是:

500

a =154476802108746166441951315019919837485664325669565431700026634898253202035277999

b =36875131794129999827197811565225474825492979968971970996283137471637224634055579

c =4373612677928697257861252602371390152816537558161613618621437993378423467772036

这三个数的位数分别是81、80和79!实际上,如果允许负整数,那么会有一个短得多的解:

a = 9499

b = -8784

c = 5165

500

500

但这个所谓“简单”的解,也不是人力可以算出来的。想了解这些问题是怎么算的,就需要学习非常高深的数学,例如刚才提到的莫德尔,他对椭圆曲线的研究就是解上面这道题的基础。莫德尔不仅可以是二战时的防守大师“莫不攻”,也可以是扮猪吃老虎的数学大师。

500

500

最后,一个有趣的巧合是,我们提到的三位数学家都叫做安德鲁:证明费马大定理的安德鲁·怀尔斯、解决k = 33的安德鲁·布克尔以及跟安德鲁·布克尔一起解决k = 42的安德鲁·萨瑟兰。他们为什么能取得这些成就?姬扬老师注意到,安德鲁这个名字的笔画数是……33。

500

500

站务

全部专栏