「任何數字最後都會變成 1」是真的嗎?──來玩玩考拉茲猜想
大家好!我是 kenji。
突然這麼問,但當你聽到「任何數字最終都會變成 1 的規則」時, 不覺得有點不可思議嗎?
比如說,19、87,甚至是 1000000。 只要按照特定的規則去計算數字,不知為何最後都會收斂為「1」。
這樣如夢似幻的故事,就是 考拉茲猜想(Collatz Conjecture) 。
話說回來,考拉茲猜想是什麼?
首先介紹一下規則。
起點:選擇任意一個 正整數
操作:
- 如果是偶數 → 除以 2(n → n / 2)
- 如果是奇數 → 乘以 3 再加 1(n → 3n + 1)
只要一直重複這些步驟, 任何數字最終都會抵達 1 ,這就是這個猜想的內容。
舉例來說,從 6 開始的話:
| |
確實變成「1」了。歡迎回來!
用程式碼試試看:用 Python 實作考拉茲猜想
那麼,這種時候用程式碼來測試是最快的! 我們用 Python 來輸出「考拉茲數列」看看吧。
| |
執行結果:
| |
完美地抵達了 1。 雖然繞了不少遠路,但最後還是順利到達終點!
順帶一提,從 27 開始,也同樣會抵達 1。
| |
執行結果:
| |
竟然要花費 111 個步驟!
而且,途中甚至有膨脹到 9000 以上的情況。 這是一個繞了超級大遠路才抵達終點的模式呢。
所以,這到底哪裡厲害了?
要說這個猜想哪裡厲害的話,
明明還沒有被證明,但不管用什麼數字似乎都會變成 1
就是這一點。
咦?那麼,1兆、或者是1京呢……?
有這個想法的人,很敏銳。 實際上,使用電腦已經驗證到大約「2的68次方」左右的數字, 全部都抵達了 1 。真是難以置信……。
但是, 「全部都會變成 1」這件事,在理論上並沒有被證明出來 。 這就是數學世界中所謂的「未解決問題」。
為什麼會變成「1」? 從機率論的方法來看(數學背景)
任何數字最終都會變成 1 聽起來就像魔法一樣,但從 機率的觀點 來看,存在著「嗯,好像確實會變成那樣呢」的合理原因。
對奇數 $n$ 進行 3n + 1,答案必定會是 偶數 。
因此,在下一個步驟一定會被 2 除,實際上就相當於 $\frac{3n + 1}{2} \approx 1.5n$。
然後,這個數字再次成為偶數的機率是 $\frac{1}{2}$。 如果它是偶數,就會再被 2 除,變成 $0.75n$,比原來的數字還要小。
雖然在數學上並不嚴謹,但如果取從一個奇數跳到下一個奇數時的「倍率」幾何平均值,已知大約會是 ** $\frac{3}{4}$ 倍** (啟發式機率模型)。 換句話說, 因為數值平均來看有縮小的趨勢 ,所以最終就會像被吸入一樣掉到 1。
如果稍微改變規則會怎樣?(與其他猜想的比較)
你會想說「那如果不乘 3 而是乘 5 呢?」,對吧。 實際上,這被稱為 $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~20」的考拉茲數列。
結論:這個世界,果然很不可思議
所以說,這就是考拉茲猜想。
- 雖然非常簡單
- 卻沒有人能證明
- 在數學界是個大難題
就是這樣一個宛如不可思議集合體般的存在。
即使是程式設計初學者也能嘗試,請務必玩玩看喔~!
推薦連結(給有興趣的人)
- Wikipedia:考拉茲猜想
- 陶哲軒 論文(英文)
- 試著製作 Python 的視覺化版本也很有趣喔!(如果有需求的話我會製作的)
如果想知道更多這種「不可思議系數學×程式設計」主題的人, 請輕鬆地提出「我想看更多」的要求。 之後我也會介紹黎曼猜想、質數的故事等等各種內容喔!
📮結束!
