第二十二夜 · 数字迷雾

第二十二夜 数字迷雾

上一夜的习题Ⅳ,请你随手写一个十位数,先猜它几步掉进 123,再跑。猜的人大多往大了猜,跑出来全部是三步,洞不在乎来路多长。这一夜出场的第一位数,人们已经猜了八十多年。猜它倒着走再回头,能不能在镜子里照见自己。机器推了它十亿次,它长成了四亿多位的巨人,还是没有照见。这不是猜错了步数的问题,是猜到今天,连它能不能照见都没人知道。

数字王国的地图,到这里换了画风。前面的夜,洞也好,巷子也好,迷宫也好,走到底总有着落,不是家,就是圈。地图上还留着三块空白,路朝那边修过很多回,修到某个刻度就停了。停下的不算失败,每一段路都是实打实验过的。停下的也不是终点,雾还在路的那头。这一夜走这三个方向,把三块空白各看一眼,再顺路探一处旧卷宗。先说好,这一夜没有结局。有结局的那几夜,讲的是人把数看穿了;这一夜讲的,是因为本身这些数字还是迷。

第一块空白在一面镜子前。第二十夜的水巷,你见过照镜子的数,153 照见自己,9376 照见自己的尾巴。还有一族数玩另一种照法,把一个数倒过来,与原数相加,看和是不是对称的。89 就玩这个。89+98=187,187+781=968,968+869=1837,一路倒着加,加了二十四步,加出了一个正读反读都一样的十三位数,8813200023188。二十四步,照见了自己。第二十夜它的全阶梯都在,你去看。

196 玩同一个游戏。

196+691=887

887+788=1675

1675+5761=7436

7436+6347=13783

13783+38731=52514

它不停。我的程序推了它十万步,写成十进制,四万一千四百九十位,我在第一万步停下核对过一次,四千一百五十九位,与第二十夜记的分毫不差。十万步没有照见回文。这不是我推得不够远。2011 年,有人把这台推磨推到了十亿次,得到的数写下来有四亿三千九百多万位,仍然不是回文。一万以内的数,别的都先后在镜子里照见了自己,出不了镜的凑在一起清点过,二百四十六个。我本来以为那是二百四十六个悬而未决的数,把它们的名字打印出来看了一眼,笑了。196,295,394,493,592,一路等差往下排,它们全在同一条倒序相加的路上,走着走着就汇进同一条队伍。万以内出不了魔镜世界的,不是二百四十六桩谜,是一桩谜的二百四十六个名字。这一族数,天下人叫它利克瑞尔数,名字是 2002 年一位叫 VanLandingham 的研究者取的,用的是自己女友的名字。传说,196 是不是永远照不见自己,到今天没人能证明,也没人能证伪。你可以说它终有一天照见,我可以说它永远照不见,我们谁也说服不了谁,因为谁也走不完那条路。

第二块空白,挂着一张两百八十多年前的信。1742 年 6 月 7 日,普鲁士的哥德巴赫给欧拉写信,信里猜了一件事。他猜的原话,用今天的话说是,每个大于 5 的整数,都能写成三个素数之和。那个年代 1 还被当成素数用,所以他的说法和今天教科书的说法隔着一层。欧拉回信,一来一往,问题磨成了今天通行的样子,每个大于 2 的偶数,都能写成两个素数之和。这就是谁都听过的 1 加 1,注意,数学里的 1 加 1 在这里不是算术,是把一个偶数拆成两个素数这件事的代号。这个猜想的迷人之处在于,它听起来简单得不像话。你看。

4=2+2

6=3+3

8=3+5

10=3+7

12=5+7

14=3+11

16=3+13

18=5+13

顺着数下去,没有一个偶数漏网,而且拆法越往后越多,22 有三种拆法,34 有四种,像一条越走越宽的路。我用程序把四到两百万之间的每个偶数查了一遍,全部拆得开。四百万亿亿也早有人查过,2013 年有一支团队把验证推到了 4 乘 10 的 18 次方,一百万亿亿那么远,全部拆得开。但拆得开的数再多,也只证明了那些数拆得开。就差一步,从无数个,到每一个。这一步两百八十年没有迈过去。它迈过去了一半,很多人不知道。哥德巴赫信里的原版,三个素数之和的那个说法,2013 年被秘鲁数学家赫尔戈特证明了。信的另一半,两个素数的版本,还开着。这桩谜在中国有一个全民皆知的名字。1966 年,陈景润在《科学通报》宣布了他关于 1 加 2 的结果,1973 年发表了全文,他证明的是,每个充分大的偶数,都可以写成一个素数,加上一个至多由两个素数相乘得到的数。离 1 加 1 一步之遥,这一步到今天没人迈过去。1978 年第一期《人民文学》刊出徐迟的长篇报告文学《哥德巴赫猜想》,一万八千字,报纸转载,陈景润成了那一年最有名的名人,数学家的职业在那一年被一代少年记进了心里。皇冠上的明珠,说的就是这一颗。明珠还在皇冠上。

第三块空白,你在第二夜就见过它的门。那一夜的画廊挂着三幅回不了家的肖像,死递归,6174,还有一幅蒙着布。原文的话是,第三幅的描述,至今没有人写得出来。这一夜,我来把布掀了。

布底下是考拉兹猜想。1937 年德国数学家考拉兹提出,规则一句话,任取一个自然数,奇数就乘三加一,偶数就除以二,对得到的数反复做,看它走到哪里。就这些。描述早就有,第二夜说没有人写得出来,说得准确些,是没有人写得出来它能走到哪里。现在我把描述写给你,一共三行。

text 复制代码
while (n != 1) {
    n = (n % 2 == 0) ? n / 2 : 3 * n + 1;
}

描述写出来了,第二夜欠的这句还上了。可你看清了,这三行写的是怎么走,不是走到哪。走不完怎么办,程序会一直转。会不会有哪个数永远到不了 1,或者绕进别的圈子,没人知道。先看看数是怎么走的。挑 27。

27\\to82\\to41\\to124\\to62\\to31

31\\to94\\to47\\to142\\to71\\to214\\to107\\to322\\to161\\to484\\to242\\to121\\to364\\to182\\to91

一路翻上去,翻到 9232,才肯回头。

9232\\to4616\\to2308\\to1154\\to577\\to1732\\to866\\to433\\to1300\\to650\\to325\\to976\\to488\\to244\\to122\\to61\\to184\\to92

\\to46\\to23\\to70\\to35\\to106\\to53\\to160\\to80\\to40\\to20\\to10\\to5\\to16\\to8\\to4\\to2\\to1

27 走了 111 步到家,111 步里上升 41 次,下降 70 次,最高翻到 9232,从 27 出发翻了三百多倍,翻上去再跌下来。这个起落的样子,像冰雹在云里滚,越滚越大,落地就碎,所以它另有一个名字叫冰雹猜想。把它引到东亚的人是日本的角谷静夫,所以中文世界也叫它角谷猜想。我再让程序把一千万以内的数全部送进去走了一遍,每一个都回到 1,无一例外。第二夜说它们全都回到四、二、一的怪圈,那个怪圈就是家门口的那条小环线,1 到 4,4 到 2,2 回 1,走到 1 就算到家,那三个数在门口自己转着圈。一千万里走得最久的是 8400511,走了 685 步。翻得最高的是 6631675,一路上到 60 万亿还多,从七位翻到十四位,再一层层跌回 1。全世界的验证推进得比我远得多,第二夜说验到三亿亿,这一夜报最新进度,路往前修了八万倍,到 2020 年已经验过 2.36 乘 10 的 21 次方以内的每一个数,全部回家。但一千万也好,三亿亿也好,10 的 21 次方也好,脚印能数清,雾数不清。把所有自然数除以已验证的个数,得到的不是百分之九十九,是零。数学家艾狄胥为这桩谜悬赏五百美元,留下一句被反复引用的话,数学还没有成熟到能处理这类问题。2019 年,陶哲轩往前推了最大的一步,他证明了几乎所有数的轨道都会掉到几乎有界的地步。几乎所有,在数学里是一句重话,它意味着例外可以有无穷多个。雾薄了一点,雾还在。

第十八夜说过,奇完全数到底存不存在,机器把 10 的 1500 次方以内梳理了一遍,一个也没有。那卷宗还开着,这里补一句近况就好,有数学家证明过,奇完全数若存在,必须比 10 的 1500 次方还大,而且至少是 101 个素数的乘积。它要来,就得带着厚厚的行李来。

把这些谜题摆在一起,你大概看出来了,它们卡住的原因是同一个。第一夜到第二十一夜,凡是能清点的,我们都清点了,九千个四位数全量押送,全部落洞,判决成立。今夜的谜反过来。倒序相加推了十亿次,推出来的每一个中间数都查过,没有回文,可下一个数查不查得出来,谁也不敢说。偶数拆到 4 乘 10 的 18 次方,全拆得开,可 4 乘 10 的 18 次方加 2 呢。程序的本事是走完每一段修好的路,谜的本事是路永远比脚印多。昨夜我们说,有一种为什么不是推导出来的,是清点出来的。今夜补上另一句,清点得完的,才有资格这么答。

雾还在。这一夜没有结局,可是你手里已经有了别人没有的,描述。三行描述,一千万个脚印,41490位的一张纸条。路修到哪里,是程序的事。雾散不散,要等一个证明来画。

这一夜的程序有三段。第一段推 196,倒序相加,用大整数,十万步报一次位数。

java 复制代码
import java.math.BigInteger;

public class LychrelPush {
    public static void main(String[] args) {
        BigInteger x = BigInteger.valueOf(196);
        for (int steps = 1; steps <= 100000; steps++) {
            String s = x.toString();
            String r = new StringBuilder(s).reverse().toString();
            if (s.equals(r)) {
                System.out.println("palindrome at step " + steps);
                return;
            }
            x = x.add(new BigInteger(r));
            if (steps % 25000 == 0) {
                System.out.println("step " + steps + ": " + x.toString().length() + " digits");
            }
        }
        System.out.println("no palindrome within 100000 steps");
    }
}

实跑输出,与正文那串数字对上。

text 复制代码
step 25000: 10389 digits
step 50000: 20779 digits
step 75000: 31134 digits
step 100000: 41490 digits
no palindrome within 100000 steps

第二段验哥德巴赫,把每个偶数拆成两素数,查到两百个为止,你可以把界改大。

java 复制代码
public class GoldbachCheck {
    static boolean isPrime(long n) {
        if (n < 2) return false;
        for (long d = 2; d * d <= n; d++) {
            if (n % d == 0) return false;
        }
        return true;
    }

    public static void main(String[] args) {
        for (long v = 4; v <= 200; v += 2) {
            String found = "";
            for (long a = 2; a <= v / 2; a++) {
                if (isPrime(a) && isPrime(v - a)) {
                    found = a + "+" + (v - a);
                    break;
                }
            }
            System.out.println(v + " = " + found);
        }
    }
}

实跑输出的开头几行,正文阵列的出处。

text 复制代码
4 = 2+2
6 = 3+3
8 = 3+5
10 = 3+7
12 = 5+7
14 = 3+11
16 = 3+13
18 = 5+13

第三段走 27 的轨道,三行规则,数步数,记峰值。

java 复制代码
public class CollatzTrack {
    public static void main(String[] args) {
        long n = 27;
        int steps = 0;
        long peak = n;
        System.out.print(n);
        while (n != 1) {
            n = (n % 2 == 0) ? n / 2 : 3 * n + 1;
            if (n > peak) peak = n;
            steps++;
            System.out.print(" -> " + n);
        }
        System.out.println();
        System.out.println("steps: " + steps + ", peak: " + peak);
    }
}

实跑输出,轨道全列太长,结尾两行在这里。

text 复制代码
... -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
steps: 111, peak: 9232

① 附录与真伪核对

 Ⅰ 考拉兹猜想验证纪录 Lothar Collatz 1937 年提出(真);验证下限,David Barina 团队 2020 年 5 月完成 2 的 68 次方以内全部验证(论文载 Journal of Supercomputing,2020,真),现行通行的下限表述为 2.36 乘 10 的 21 次方(维基口径,登记);此前分布式项目 yoyo@home 保持约 2 的 66 次方纪录(真)。第二夜「三亿亿」为 3 乘 10 的 16 次方,与现役下限相差约八万倍,本夜已刷新。

 Ⅱ 艾狄胥引文 Paul Erdős,「Mathematics is not yet ripe for such questions.」,通行中译「数学还没有成熟到能处理这类问题」(真,通行口径);常系于 1983 年前后,原始出处存疑(登记);为考拉兹猜想悬赏 500 美元(真,通行说法层)。

 Ⅲ 陶哲轩结果 「Almost all orbits of the Collatz map attain almost bounded values」,2019 年预印本,正式发表于 Forum of Mathematics, Pi(2020,真);对数密度意义下几乎所有正整数的考拉兹轨道最小值任意小(真);例外集密度为零但可为无穷(真);不构成完整证明(真)。

 Ⅳ 哥德巴赫信件 1742 年 6 月 7 日哥德巴赫致欧拉(真);原版表述为大于 5 的整数拆三素数之和,年代 1 尚按素数使用(真);现行二元版经欧拉通信演化成形(真);三元版 2013 年 Harald Helfgott 证明(真);二元版验证至 4 乘 10 的 18 次方,Oliveira e Silva、Herzog、Pardi,Mathematics of Computation(2014,真)。

 Ⅴ 陈景润与徐迟 1966 年 5 月《科学通报》宣布 1 加 2 结果(简报),1973 年发表全文证明(真);徐迟《哥德巴赫猜想》,《人民文学》1978 年第 1 期,约一万八千字,后经《人民日报》《光明日报》转载(真);「数学皇冠上的明珠」为该文流行语(真)。

 Ⅵ 196 与利克瑞尔数 Romain Dolbeau 2011 年完成 10 亿次倒序相加,得 413930770 位(真,维基口径);本机实跑十万步得 41490 位,第一万步 4159 位与第二十夜纪录一致(真,实跑);一万以内未出回文者 246 个,全部位于 196 的倒序相加轨道族(真,实跑);Lychrel 一词由 Wade VanLandingham 约于 2002 年取自其女友之名(通行说法层);196 是否真为利克瑞尔数,两个方向均未证明(真)。

 Ⅶ 奇完全数近况 若存在则大于 10 的 1500 次方且至少 101 个素因子,Ochem 与 Rao(2012,真,第十八夜已核);偶完全数与梅森素数一一绑定,个数随 GIMPS 更新(真)。

 Ⅷ 本机实跑 2026-10-29,JDK 21,考拉兹一千万全扫无一例外(步数冠军 8400511 共 685 步,峰值冠军 6631675 峰值 60342610919632);哥德巴赫四至两百万存在性全扫通过;196 十万步 BigInteger 推进。

② 术语对照

 Ⅰ 利克瑞尔数 疑为经反复倒序相加永不能得到回文数的自然数,196 为最小候选,是否真有此族尚未证明。

 Ⅱ 哥德巴赫猜想 每个大于 2 的偶数都可写成两个素数之和;「1 加 1」为此事的代号,非算术。

 Ⅲ 考拉兹猜想 奇数乘三加一、偶数减半,反复进行,是否所有自然数都回到 1,未证明;别名冰雹猜想、角谷猜想。

③ 今夜习题 三道加一句征对,评论区见。

 Ⅰ 把 27 的轨道打印全列,数一数它一路上到过多少个不同的高度,再挑一个你自己的两位数,算算它走几步、翻多高。

 Ⅱ 哥德巴赫的拆法里,4、6、8、12 各只有一种拆法。写程序找出三百以内所有只有一种拆法的偶数,看看 12 之后还有没有。

 Ⅲ 用大整数把 89 和 196 各推一万步。89 第几步照见自己,196 一万步长到多少位。把两个数放在一起,说说你的感觉。

 Ⅳ 三桩谜你最先想看哪一桩被解开。评论区聊聊,多少年后回头看这条评论。


本书目录导航 上一篇:第二十一夜 · 数字黑洞与西西弗斯的惩罚 下一篇:第一分册后记 从数字王国告别 起点:卷首语·算法童话


版权声明:本文为作者原创,受著作权法保护。未经授权禁止转载、搬运、摘编、改编及任何形式的二次创作;个人学习引用请注明作者与原文出处。转载授权请联系作者(CSDN 私信)。侵权必究。

相关推荐
Raas1001 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
Pniubi1 小时前
力扣283移动零(双指针法)
算法·leetcode·职场和发展
hhb_6182 小时前
大模型落地三重优化实战
人工智能·算法·机器学习
云和数据.ChenGuang2 小时前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain
niucloud-admin2 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
霸道流氓气质2 小时前
智能客服组件:分层意图识别、RAG Advisor 与人工转接状态机的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
captain3763 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
2601_970703833 小时前
工业除湿机租赁:把一份租金合同拆开看
大数据·数据结构·算法·数据库架构·推荐算法
心中有你02143 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法