伯恩哈德黎曼,1826年9月17日-1866年7月20日
“在这些方法的帮助下,可以确定小于X的少数数字。
”伯恩哈德·黎曼如是说。黎曼所说的方法,就是我们接下来要介绍的数学中最有名的函数之一:黎曼 Zeta 函数。在讨论素数的那部分中,我提到了伯恩哈德·黎曼 1859 年的论文《论小于某个给定值的素数的个数》,在论文中他发现了一个计算小于任意给定值的素数个数的方法。这是一个了不起的方法,让数学家从更深层次了解素数的分布和性质。但唯一的问题是黎曼无法证明这个方法是对的,不过他证明了如果 Zeta 函数展现的线性排布是正确的,那么计算素数个数的方法也一定是正确的,但他同样无法证明线性排布是正确的。在论文发表后,当时的焦点就变成了“只要能证明 Zeta 函数的线性排布规律是正确的,数学家就能洞察素数的秘密”。这听起来非常合理。黎曼的论文只有 10 页。他将一些工作留给后人去完成也是可以理解的,或许,一想到这些结论有可能都是对的,他就激动得不行,以至于最后自己没去证明它。结果,就像人=铁、饭=钢一样确定无疑,其他数学家接手了黎曼的工作,但是他们也无法证明。直到现在,黎曼假设仍悬而未决。
那么,什么是黎曼 Zeta 函数(自从黎曼的论文问世之后,不断有许多没那么有名的 Zeta 函数涌现,但是一般而言,提到“Zeta 函数”时一般指的是黎曼的原始版本)呢?我们其实在前面已经见过它了—它建立在欧拉解决的巴塞尔问题之上。Zeta 函数是对无穷负幂次序列求和,一般我们用希腊字母 Zeta(ζ) 来指代黎曼 Zeta 函数,如下式:
你应该对它比较熟悉了,因为不仅欧拉计算了这个函数的一些结果,而且我们利用伯努利数也很容易计算出 s 为偶数时的函数值。但是,为了看到 Zeta 函数的全貌,我们需要计算 s 取任意值时的情形。黎曼不仅将这种“巴塞尔函数”推广到 s 取非整数的情形,还将其推广成能同时输入两个数值的函数。
我们似乎走得太远了。讨论黎曼假设和 Zeta 函数时,通常都怀有“先把人骗过来再说”的想法。说好要深入研究素数的个数和分布,你却谈负幂次求和。素数去哪儿了?别急,它们之间确实有奇异的关联。为了指明这一点,我们还得再谈到欧拉。
除了攻克巴塞尔问题,欧拉还意识到所有正整数的某负幂次之和等于一个只用素数表示的无穷分式序列的乘积,所以 Zeta 函数可以写成两个不同的式子,其中一个表达式仅依赖素数。正整数形式的表达式与素数形式的表达式结果相同,只不过前者更容易操作,因为我们知道所有正整数是什么,但不知道所有素数是什么样的。但两个表达式是等价的,我们可以用一个代替另一个。Zeta 函数和素数的联系便是黎曼这篇论文获得成功的关键。研究负幂次求和让我们对素数的乘积 (以分数的形式)有深刻了解。
Zeta 函数的神通广大令它非常有用,但是要用好它却十分困难。毫无疑问,它是一个狡猾而隐晦的函数。我们有数不尽的方程来描述 Zeta 函数,但每个都只能代表它的一小部分。我认为理解 Zeta 函数最好的方式是把它想象成人类正在一点一点发掘的神秘函数。我们偶尔会对它有新的理解,但每次只是前进一小步。我们已经看到,利用伯努利数,我们可以计算出 m 为偶数时的 Zeta 函数值。拉马努金则首次发现了幂次为正奇数的结果,也就是说,他完全独立地发现了 Zeta 函数,但是他也只是看清了 Zeta 函数的一小部分。
如果我们将 Zeta 函数画出来,也许就可以更直观地观察它。然而,即便是找到“简单”部分的精确函数值,也要花费欧拉、拉马努金以及其他仍然在世的著名数学家的大量精力。要想获得更复杂的函数值似乎是不可能的,而素数在我们看到 Zeta 函数全貌之前是不会透露它们的秘密的。但看看素数在当今数据安全领域的至高地位,我们的探索一定是值得的。
不过,我们可以用些小把戏。我们虽然求不到精确值,但是可以计算“足够好”的近似值。假设我们不知道 ,但打算用赖皮的方法寻求得数。我们可以不计算无穷项之和,只计算有限项的和来逼近准确的结果。如果只取前 3 项,我们会得到 1.361111111,而 ,所以前 3 项的结果还不是很接近。取前 10 项会好一些,误差会降低到 5.8%。不过计算过程太无聊了,所以我写了一个程序将前 10 亿项加起来,最终得到 1.64493405783457,这个数字已经足够接近精确答案了。
这是一个仍然涉及大量计算的取巧方法。相比之下,拉马努金的天才之处在于,他发现了计算 Zeta 函数取负值时的方法。正如我们前面看到的,它们的和本来是飞速发散到无穷的,但是拉马努金却能把最核心和重要信息提炼出来。使用伯努利数,他计算出 Zeta 函数的输入取负值时的输出值。最终,我们可以画出 Zeta 函数的完整图像。
该图像显示,当输入值为正值时,输出值在无穷远处下降,然后缓慢接近 1,右边的图像似乎没有什么有趣的东西。在输入值为负值的左边,函数值来回波动。它有规律地穿过横轴,交点的函数值为 0,这些点毫无意外被称为零点。这些零点本身也并不令人意外,被称为平凡零点(trivial zero)。当输入值为负偶数时,它们会如期出现。而且我们知道它们为什么会出现,因为每两个连续的伯努利数就有一个 0。这也都在我们的意料之中。
我们没有料到的是—在坐标轴之外还有一些零点。黎曼将 Zeta 函数拓展成可以输入两个数值的函数,画出了其三维图像。从图中可以看到,在原坐标轴的旁边,还有一系列零点。这些零点的出现令人意外,不仅如此,所有我们已经窥见的零点竟然排成了一条直线。
Zeta函数的三维图像. 你可以看到平凡零点都在x轴负方向, 还可以看到一些意外出现的零点, 它们排列成一条直线(x=1/2). 这其实是zeta函数的对数图像, 目的是突出零点
这些零点不是平凡零点,它们不能从函数表达式中明显地看出来。对于非平凡零点(non-trivial zero),直到现在,我们还没有完全理解。令人毛骨悚然的是,图象上其他地方完全有可能也有零点,但所有的零点竟然全都立正对齐站成了一条直线,而我们还不知道为什么会这样。这条直线和原来的数轴在 1/2 处垂直。它们随意地分布在直线上,但奇怪的是,它们全在一条直线上。黎曼假设断言 Zeta 函数的所有非平凡零点都在这条直线上。如果我们能够证明黎曼假设是正确的,就能证明计算素数个数的方法是正确的。这种怪异的数学逻辑——零点的直线排布,表现了本质上来源于素数分布密度内含的逻辑性。这看起来似乎没有道理,但总之,如果我们能够窥探零点直线分布的秘密,就会知道素数到底藏在哪里。
虽然一直有人尝试证明黎曼假设,但它至今仍然悬而未决。1914 年,哈代成功证明了这条直线上有无穷多个零点,但他无法证明直线之外没有零点。我们目前已经知道 40%的非平凡零点都在这条直线上,但是无法确切保证 100% 的非平凡零点都在上面。只要这条直线外有一个非平凡零点,黎曼假设就会被推翻,我们建立在其上的素数理解就会顷刻崩塌,但是我们至今一个反例也没有找到。所有事实都显示我们走在正确的轨道上,但是我们就是无法证明它。
1900 年,德国数学戴维·希尔伯特(David Hilbert)列出了一个下个世纪最重要的数学问题表,黎曼假设就位列其中。如果没有黎曼假设,我们就会失去理解素数本质的唯一线索。然而,一个世纪后,克雷数学研究所(Clay Mathematics Institute)再次列出下个世纪的重要数学问题时,黎曼假设仍然赫然在列。直到现在,克雷数学研究所为黎曼假设设置的 100 万美元悬赏仍然没有找到主人。如果谁可以证明 Zeta 函数的所有非平凡零点都在一条直线上,谁就可以拿走这 100 万美元。
很多数学家做了和黎曼一样的事:在素数计数法的帮助下勇往直前,假设后面有人能够证明它是正确的。这么做看上去很保险:计算机已经检查了前 10 万亿个非平凡零点,它们全在那条直线上。话虽这么说,但有的数学理论就曾被比这还大的数推翻。因此,完全有可能存在跑到直线之外的零点,只不过我们还没碰到而已。证明或推翻黎曼假设会让一群人高兴或伤悲。当然,能证明其正确的人可以得到那 100 万美元的奖金。我觉得还应该单独为推翻它的人设立安慰奖,毕竟他扫了全人类的兴。
顺带提一下,希尔伯特自己对它也持怀疑态度,他认为即便再过 1000 年,这个假说依然不能被证明。他说道:“假如我可以在 1000 年后醒来,我的第一个问题一定是,黎曼假设被证明了吗?”
上文节选自后浪新出版《我们在四维空间可以做什么》, [遇见] 已获发布此部分授权.