Featured image of post 什么是考拉兹猜想?用Python验证任何数字最终都会变成1的数学未解之谜

什么是考拉兹猜想?用Python验证任何数字最终都会变成1的数学未解之谜

“偶数减半,奇数乘3加1”不断重复最终必然是1?通俗讲解著名数学未解之谜“考拉兹猜想”的奇妙规则。此外将编写Python程序,实际模拟数列是否收敛于1。

“任何数字最后都会变成1”是真的吗?——玩转考拉兹猜想

大家好!我是kenji。

很突然,但当你听到“无论什么数字最终都会变成1的规则”时, 是不是觉得有点不可思议?

例如19,或者87,甚至1000000也是如此。 只要按照特定的规则去处理数字,不知为何最后都会收敛于“1”。

像做梦一样的故事,就是 考拉兹猜想(Collatz Conjecture)


首先,什么是考拉兹猜想?

首先介绍一下规则。

  • 起点:选择任意一个 正整数

  • 操作:

    • 如果是偶数 → 则减半(n → n / 2)
    • 如果是奇数 → 则乘以3再加1(n → 3n + 1)

一直重复这个过程, 任何数字最终都会到达1 ,这就是这个猜想的内容。

例如,从 6 开始的话:

1
6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1

确实变成了“1”。欢迎回来!


用代码试试看:Python中的考拉兹

好了,这种时候用代码来测试是最快的! 让我们用Python输出一下“考拉兹数列”。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
def collatz(n):
    steps = [n]
    while n != 1:
        if n % 2 == 0:
            n = n // 2
        else:
            n = 3 * n + 1
        steps.append(n)
    return steps

# 示例:从19开始
print(collatz(19))

运行结果:

1
[19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]

完美地到达了1。 虽然绕了不少弯路,但最后还是稳稳地冲过了终点!

顺便说一下,即使从 27 开始,也会以同样的方式到达1。

1
print(collatz(27))

运行结果:

1
2
3
4
5
6
7
8
[27, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242,
121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350,
175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167,
502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479,
1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911,
2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732,
866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35,
106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]

竟然花去了111个步骤!

而且,中间还有膨胀到9000以上的阶段。 真是绕了一个超级大的圈子才到达终点的情况啊。


那么,这到底有什么了不起的呢?

这个猜想之所以令人惊叹,是因为:

虽然还没有被证明,但似乎无论用什么数字,最后都会变成1

就是这一点。

诶?那1万亿、1京(兆的上一级)呢……?

能想到这点的人很敏锐。 实际上,人们已经使用计算机验证到了大约“2的68次方”, 全部都到达了1 。真是难以置信……

但是, “全部都会如此”并没有在理论上被证明 。 这就是数学世界中所说的“未解决问题”。


为什么会变成“1”?来自概率论的方法(数学背景)

任何数字最终都会变成1,这听起来像魔法一样,但从 概率的角度 来看,确实存在“嗯,好像是会那样”的合理理由。

对奇数 $n$ 执行 3n + 1,结果一定会是 偶数 。 因此,在下一个步骤中,它必定会被除以2,实际上就变成了 $\frac{3n + 1}{2} \approx 1.5n$。

然后,这个数字再次成为偶数的概率是 $\frac{1}{2}$。 如果是偶数,它会再次被除以2,变成 $0.75n$,比原来的数还要小。

虽然在数学上并不严谨,但从奇数跳到下一个奇数时,其“倍率”的几何平均已知 大约是 $\frac{3}{4}$ 倍 (启发式概率模型)。 也就是说, 平均而言,数值呈现出缩小的趋势 ,因此最终会被吸入并落到1。

稍微改变一下规则会怎样?(与其他猜想的比较)

“那要是改成乘以5而不是乘以3呢?”大家可能会这么想。 实际上,这被称为 $5n + 1$ 问题 ,在这种情况下,并不是所有的数都会收敛于1。

在 $5n + 1$ 的情况下,已经确认存在多个不同的循环(loop),并且也有人指出可能存在无限变大(发散)的数。 此外,在 $3n - 1$ 问题 的情况下,除了“$1 \to 2 \to 1$”的循环之外,还存在像“$5 \to 14 \to 7 \to 20 \to 10 \to 5$”这样的其他循环。

由此可见,考拉兹猜想中“全部收敛于1(即 $4 \to 2 \to 1$ 的循环)”的性质,是建立在多么精妙的平衡之上的。


人类的到达点①:计算机穷举的极限

目前,世界各地的数学家和计算机科学爱好者们,正在利用分布式计算(汇集全球个人电脑计算能力的项目)和GPU,不断地计算考拉兹猜想。

截至2020年,计算机已经确认,对于高达 $2^{68}$(约29京5000兆) 以下的所有初始值,考拉兹猜想都是正确的(最终变为1)。

然而,在数学的世界里,不能说“因为已经确认到29京,所以全部都是正确的”。因为面对无限延伸的数字之海,$2^{68}$ 也只不过是“最初的一滴水”而已。


人类的到达点②:不可判定性与陶哲轩的突破

面对“为什么谁也无法证明?”的疑问,英国天才数学家约翰·康威(John Conway)于1972年证明了,稍微扩展一下考拉兹猜想的问题是 “不可判定的(Turing complete)” 。 这是一个涉及计算机科学根本的恐怖事实:根据某些规则,“原理上不存在能够判定是否会到达1的算法”。考拉兹猜想本身,甚至有可能是现代数学框架内无法证明的命题。

然而,在2019年,终于出现了重大突破。 现代最顶尖的天才数学家之一 **陶哲轩(Terence Tao) ** ,运用偏微分方程和概率论的方法,证明了“(虽然不能严格说是全部)对于几乎所有的初始值,考拉兹数列最终都会到达一个比原数小得多的值 ”。

虽然这不是“全部都会变成1”的完整证明,但作为 人类最接近考拉兹猜想真理的历史性到达点 ,在世界数学界引起了轰动。


考拉兹先生是谁?

读到这里,你可能会想“所以考拉兹到底是谁?”。 让我来好好介绍一下!

  • 姓名: 洛塔尔·考拉兹(Lothar Collatz)
  • 国籍:德国
  • 生卒年:1910年〜1990年
  • 头衔:数学家(活跃于泛函分析和数论领域)

他在1937年提出了这个猜想, 在那之后的80多年里, 谁也没能证明,也没能反证

顺便说一句,这个问题虽然极其简单但却非常深奥, 据说连保罗·埃尔德什(Paul Erdős,超级著名的数学家)都曾这样说过:

“数学还没有成熟到可以解决考拉兹猜想的地步。”

也就是说,人类的数学还没能追上这个谜团的假说……


不需要“复杂的公式”

考拉兹猜想的优点在于, 任何人都可以玩

只要有纸和笔就能算。 用Python写段代码,就能自动测试。 尽管如此, 最前沿的数学家们却在认真地挑战它

这难道不让人感到兴奋吗?


附赠:一次性测试的代码

我也附上了一次性测试各种数字的代码哦。

1
2
3
for n in range(1, 21):
    steps = collatz(n)
    print(f"{n}: {steps}(步骤数: {len(steps)-1})")

这可以一口气输出“1~20”的考拉兹数列。


结论:这个世界,果然不可思议

综上所述,这就是考拉兹猜想。

  • 明明超级简单
  • 却谁也无法证明
  • 在数学界是个大难题

它就像是一个不可思议的集合体。

即使是编程初学者也能尝试,所以请大家务必玩玩看哦〜!


推荐链接(面向感兴趣的人)


如果大家还想了解更多这类“不可思议系数学×编程”的题材, 请随时向我提出“还想知道更多”的请求。 之后,我还会介绍黎曼猜想、素数的故事等各种各样的内容!


📮结束!


使用 Hugo 构建
主题 StackJimmy 设计