在《疑犯追踪》第二季第 11 集里,「宅总」哈罗德·芬奇讲过一段关于圆周率的话:在 π 无穷无尽的小数中,也许藏着你的生日、电话号码,甚至是用数字写下的整个人生。
这个想法很浪漫。我们熟悉的 3.1415926……,突然像一座没有尽头的图书馆,里面可能有每个人的故事。 不过,π 真的什么都有吗?先从一个小问题开始:你的生日在里面吗?
先试试:找到你的 Pi Day
在下面输入一个日期,看看它对应的八位数字,第一次出现在 π 的什么位置。例如,2015 年 3 月 14 日会写成 20150314。位置从小数点后的第一位开始数,整数部分的 3 不算。
从 2015-03-14 开始 · 1900–2100 年的每一天都已在 π 的前 30 亿位里找好
这个实验支持 1900 年 1 月 1 日到 2100 年 12 月 31 日。把这段时间里的 73,414 个有效日期写成八位数字,它们全部能在 π 的小数中找到。
这些位置都是提前算好的,做法见下一节。这里面有几个有意思的例子:
2019 年 9 月 14 日:
20190914从第 244 位开始出现,是这批日期中最早出现的。2015 年 3 月 14 日:
20150314第一次出现,要等到第 120,003,525 位。1920 年 11 月 30 日:
19201130藏得最深,第一次出现的位置是第 1,042,067,391 位。
同样是八位数字,有的几百位就找到了,有的要找十多亿位。先记住这份差异,后面讲「均匀」时还会遇到它。
这些位置是怎么算出来的
网上已经有不少「在 π 里找生日」的网站,常见的做法是现查:你提交日期之后,网站再到一段存好的 π 数字里去找这串数字。比如:
MyPiDay(Wolfram 出品):把日期写成不带世纪的「月日年」,1959 年 8 月 29 日写成
82959,在 π 的前 1000 万位里做字符串查找,覆盖一个世纪的 36,525 个日期。Pi-Search:在前 2 亿位里查找,短的数字串逐位比对,长的借助预先建好的索引。按它的估算,一个 8 位数字串能在前 2 亿位里找到的概率约是 86%。
这里反过来:先把所有可能被问到的日期一次查完,读者查询时只是读出一行现成的结果。整个过程分四步:
算 π:用 Chudnovsky 公式加二分拆分,多进程算出小数点后 30 亿位,在一台电脑上用了约 18 分钟。
一次扫完:用 8 位宽的窗口一位一位滑过这 30 亿位,记下 1900-01-01 到 2100-12-31 每个日期第一次出现的位置。
交叉校验:数字文件的开头和第 10 亿位附近,都与公开的 π 值一致;每条结果再回到数字文件里,核对日期本身和前后各 5 位。73,414 条,没有一处对不上。
压成小文件:每十年一个文本文件,约 95 KB,一天一行,存着位置、在所有日期里的早晚排名,以及前后各 5 位数字。
和现查相比,这样做有几个好处:
查得深:30 亿位是 MyPiDay 的 300 倍、Pi-Search 的 15 倍。八位写法下,有 9,952 个日期第一次出现在 2 亿位之后,最深的那个要到 10 亿位以后,只查前 2 亿位就找不到它们。
年份完整:用
YYYYMMDD八位写法,带着世纪,1959 年和 2059 年的 8 月 29 日是两串不同的数字,不会查出同一个结果。比如19590829第一次出现在第 40,615,403 位。全部找到,还能排名:两百年里的每一天都有结果,所以除了位置,还能告诉你这一天在 73,414 天里排第几早。
读者这边不用算:查询时,浏览器只下载这一天所在十年的结果文件,按日期算出是第几行,直接读出来。不用下载 π 的数字,也不用搜索。
可以复核:每条结果都带着前后各 5 位数字,拿任何一份公开的 π 数字都能对照。
结果的统计也和概率论的预期对得上:如果 π 的数字像随机数一样,一个 8 位数字串第一次出现的位置平均约在第 1 亿位,中位数约是 ln 2 × 1 亿 ≈ 6,931 万位。实际算出来,平均是 100,098,232 位,中位数是 69,410,669 位。不过这只是统计上的吻合,下面会说到,它不能代替证明。
找到了这些日期,能证明的就是这些日期确实出现过。要进一步说「所有数字组合都能找到」,还需要跨过很大的一步。
无限不循环,意味着什么?
这件事涉及三个容易混在一起的概念:无理数、合取数、正规数。下面都先按我们熟悉的十进制来讨论。
无理数:小数没有尽头,也不会进入循环
无理数不能写成两个整数的比。它的小数会一直延伸,而且不会从某一位开始,反复播放同一段数字。π 和 √2 都是无理数。
这里的「不循环」,可别理解成「任何数字片段都不能重复」。比如 123 出现过一次,后面当然可以再次出现。它排除的是 0.123123123…… 这样,从某处开始就永远按固定周期重复的情况。
更容易误会的一点是:无限不循环,并没有保证十个数字都会出现。我们自己就能写出一个反例:
0.101001000100001000001……
写法很简单:在相邻两个 1 之间,依次放 1 个、2 个、3 个、4 个……0。零越来越多,1 却始终还会出现,所以它不会结束,也不会进入固定周期。它是无理数,但从头到尾只有 0 和 1,连一个 2 都没有。
因此,单凭「π 是无理数」,推不出「π 里有你的生日」。
合取数:每一段有限的数字串都能找到
想让「什么都有」成立,需要更强的性质:无论给出哪一段有限长度的数字串,都能在小数展开中找到一段连续的匹配。这就是这里说的「合取」。
123、000000、八位生日,甚至一万位长的数字串,都在要求之内。重点是「有限」:再长也可以,但必须有结尾。它没有承诺包含另一条完整的、无限长的数字序列。
把一本书按约定的编码变成数字后,也是一段有限数字串。如果一个数具有这种性质,那么它的小数里就能找到这本书的编码。到这一步,「无限图书馆」的比喻才有了依据。
正规数:不仅找得到,长期比例也均匀
正规数又多提了一个要求:每一种同样长度的数字串,出现的长期比例都相同。十进制下,具体来说:
看单个数字,0 到 9 各自的比例趋近 1/10。
看连续两位,00 到 99 各自的比例趋近 1/100。
看连续八位,每一种组合的比例趋近 1/100,000,000。
统计时,把窗口一位一位向后滑动,相邻窗口可以重叠。而且这个要求要对每一种有限长度都成立。只做到十个数字一样多还不够:0.01234567890123456789…… 每个数字都占十分之一,却永远不会出现 00。
「长期均匀」也不等于间隔整齐。它没有规定每隔一亿位必须出现一次你的生日,更没有规定第一次出现的位置。前面那些相差悬殊的日期,正好提醒我们把这两件事分开。
这三个概念的关系,可以记成一条单向箭头:正规数 → 包含所有有限数字串 → 无理数。反过来都不能直接推。正规数的严格定义,可见 Bailey 与 Borwein 的这篇介绍。
那 π 到底属于哪一种?
我们已经证明了 π 是无理数;但它是否在十进制下包含所有有限数字串、是否为正规数,仍然没有证明。后两项都是猜想,不能把「很相信」写成「已经知道」。
既然还没证明,为什么这么多人相信它?大致有两方面的理由。
第一,正规数在实数里非常普遍。1909 年,Borel 证明了:在数学上的「几乎处处」意义下,几乎所有实数都是绝对正规数,也就是在每个整数进制(至少为 2)下都正规。直观地说,如果能在 0 到 1 之间均匀随机抽一个实数,抽到绝对正规数的概率是 1。相关历史见《正规数的神秘世界》。
但这不等于没有例外。π 是一个确定的数,不是我们刚刚随机抽出来的数。关于「绝大多数」的结论,可以帮助形成直觉,不能替这个特定的数完成证明。
第二,是计算给出的证据。在已经算出的 π 的大量数位中,数字和短数字串的分布表现出很好的均匀性。Bailey 等人的统计研究介绍讨论了这类证据,也明确区分了统计检验与数学证明。
上面的生日实验也是一份很直观的观察:我们关心的七万多个日期都找到了。但它检查的是一批特定的八位数字串,还远没有覆盖任意长度的所有组合。
为什么算了那么多位,还是不能证明?
因为「不管后面有多远都成立」,比「眼前这一大段成立」难得多。正规性讨论的是位数无限增加时的长期比例,任何有限的开头,都不能单独决定这个比例。
做一个思想实验:先原样抄下 π 的前一万亿位,然后在后面接上 101001000100001……,让 1 之间的零越来越多。这个新数在前一万亿位与 π 完全相同,却最终几乎全是 0,当然不是正规数。
这没有说明 π 后面会这样变化。它说明的是:仅靠已经检查过的有限数位,我们无法排除另一种后续。计算能不断增加证据,证明则需要能约束整个无限序列的理由。
有趣的是,我们确实知道一些正规数。例如,把所有正整数依次接到小数点后面:
0.1234567891011121314151617……
这叫 Champernowne 常数,已经被证明在十进制下正规。它的构造规则非常清楚,我们可以沿着这条规则研究数字的分布。相关证明的历史也记在这篇正规数综述中。
这也提醒我们:正规性不等于「毫无规律」。一个数可以有很简单的生成方法,同时让所有有限数字串在长期统计中均匀出现。对于 π、e、√2 这些熟悉的常数,证明正规性仍然非常困难。
πfs:把文件存进 π,硬盘就省了吗?
沿着「数字里可能什么都有」的想法,还有一个很有趣的项目:πfs(pifs)。它尝试用 π 中的数字来表示文件。
文件在计算机里最终都是字节序列。设想把一个文件对应的数字串在 π 里找到,然后只记下它从哪里开始、总共有多长。下次读取时,再去那个位置把数字算出来,拼回原来的文件。
听起来,只要知道 π,就拥有了一块无限大的硬盘。问题是:位置和长度本身,也得存下来。
想象一本巨大无比的书,里面包含你写过的每一张便签。你可以不保存便签原文,改存页码和起止位置。但书越大,页码可能越长;找到那一页、重新读出内容,也都要花时间。
πfs 的实际做法更细:为了减少搜索的开销,它把文件拆成一个个字节,分别记录这些字节在 π 中的位置,再借助 BBP 公式提取相应的十六进制数位来还原。也就是说,文件的信息仍然需要由这些位置记录来承载。具体设计可见它的项目说明。
这种逐字节的实现,只要能找到所需的字节值就可以工作,并不需要先解决「π 是否包含所有任意长数字串」的难题。因此,程序能跑起来,也不构成 π 正规性的证明。
它更像一个程序员式的数学玩笑:把「保存内容」换成「保存内容的地址」,顺便让我们看见,索引和计算也都有成本。丢了那些地址,哪怕内容仍在 π 里,也很难知道哪一段才是你的文件。
回到最开始的生日。我们还不能保证 π 包含每一个可能的故事,但可以确认某个日期已经在它的小数中出现。对这个小实验来说,找到那八位数字,就已经足够有趣了。
参考链接
果壳:π 里包含了所有可能的数字组合吗?(2014):本文开头《疑犯追踪》的台词和配图出处,也讨论了正规数和 πfs。
MyPiDay:Find Your Pi Day(Wolfram):现查方式的生日查询网站,这个链接打开的是 1959 年 8 月 29 日。
Pi-Search:在 π 的前 2 亿位里查找任意数字串。
全文评论
0正在加载评论…