考拉茲猜想

未解決的數學問題對所有自然數,如果它是奇數,則對它乘3再加1,如果它是偶數,則對它除以2,如此循環,最終都能夠得到1。 Question mark2.svg

考拉茲猜想(英語:Collatz conjecture),又稱為奇偶歸一猜想3n+1猜想冰雹猜想角谷猜想哈塞猜想烏拉姆猜想敘拉古猜想,是指對於每一個正整數,如果它是奇數,則對它乘3再加1,如果它是偶數,則對它除以2,如此循環,最終都能夠得到1。

例子編輯

取一個正整數:

  • 如n = 6,根據上述數式,得出序列6, 3, 10, 5, 16, 8, 4, 2, 1。(步驟中最高的數是16,共有8個步驟)
  • 如n = 11,根據上述數式,得出序列11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1。(步驟中最高的數是52,共有14個步驟)
  • 如n = 27,根據上述數式,得出序列
{ 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 }(步驟中最高的數是9232,共有111個步驟)

奇偶歸一猜想稱,任何正整數,經過上述計算步驟後,最終都會得到1。

 
n = 27時的序列分布(橫軸-步數;縱軸-運算結果)

數目少於1萬的,步驟中最高的數是6171,共有261個步驟; 數目少於10萬的,步驟中最高的數是77031,共有350個步驟; 數目少於100萬的,步驟中最高的數是837799,共有524個步驟; 數目少於1億的,步驟中最高的數是63728127,共有949個步驟; 數目少於10億的,步驟中最高的數是670617279,共有986個步驟。

研究歷史編輯

在1930年代,德國漢堡大學的學生考拉茲英語Lothar Collatz,曾經研究過這個猜想。在1960年,日本人角谷靜夫英語Shizuo Kakutani也研究過這個猜想。但這猜想到目前,仍沒有任何進展。

保羅·艾狄胥就曾稱,數學上尚未為此類問題提供答案。他並稱會替找出答案的人獎賞500元。

目前已經有分布式計算在進行驗證。到2009年1月18日,已驗證正整數到 5 × 260 = 5,764,607,523,034,234,880,也仍未有找到例外的情況。但是這並不能夠證明對於任何大小的數,這猜想都能成立。

有的數學家認為,該猜想任何程度的解決都是現代數學的一大進步,將開闢全新的領域。目前也有部分數學家和數學愛好者,在進行關於「負數的3x+1」、「5x+1」、「7x+1」等種種考拉茲猜想的變化形命題的研究。

2019年12月,陶哲軒證明只要 是一個趨於正無窮的實數列,那麼幾乎對所有的正整數  (在對數密度意義下) ,有 [1][2]

計算機驗證編輯

Python編輯

以下是這個猜想的Python版本代碼。它會在答案得到1時停下來,以避免作0→0這個無限循環。

def collatz(number):
    while number != 1:
        if number % 2 == 0:
            number = number // 2
        elif number % 2 == 1:
            number = number*3 + 1
        print(number)

collatz(int(input('輸入一個正整數')))

C語言編輯

#include <stdio.h>

void collatz(unsigned int n){
  while(n > 1){
    printf("%u\t->\t", n);
    n = n & 1 ? n * 3 + 1 : n / 2;
  }
  printf("1");
}

Java編輯

void collatz(int n){
  while(n > 1){
    System.out.print(n + "\t->\t");
    n = n % 2 == 0 ? n / 2 : n * 3 + 1;
  }
  System.out.print(1);
}

Visual Basic編輯

Imports System
Imports System.Console

Public Sub Collatz(ByVal n As UInteger)
    System.Console.WriteLine(n)
    If n = 1 Then Exit Sub
    n = n * 3 + 1
    Do While(n Mod 2 = 0)       // remove all trailing '0's
      n /= 2
    Loop
    Call Collatz(n)
End Sub

JavaScript編輯

function collatz(n) {
  while(n > 1)
    n = !(n % 2) ? n / 2 : n * 3 + 1;
}


golang編輯

func collatz(num int) {
    for num != 1 {
        if (num % 2) == 1 {
            num = num*3 + 1
        } else {
            num = num / 2
        }
        println(num)
    }
}

shell編輯

read -p "输入一个正整数:" num
function collatz()
{
    local n=$1
    while [ $n -ne 1 ]
    do
        [[ $(($n%2)) == 0 ]] && let n/=2 || let n=n*3+1 ; echo $n
    done
}
collatz $num

參考資料編輯

  1. ^ Kevin Hartnett. Mathematician Proves Huge Result on 『Dangerous』 Problem. Quantamagazine. 2019-12-11 [2019-12-16]. 
  2. ^ Terence Tao. Almost all orbits of the Collatz map attain almost bounded values. arXiv. 2019-09-13 [2019-12-16]. 

相關條目編輯

外部連結編輯