考拉兹猜想

考拉兹猜想英語:),又称为奇偶归一猜想3n+1猜想冰雹猜想角谷猜想哈塞猜想乌拉姆猜想叙拉古猜想,是指对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到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年代,德国汉堡大学的学生考拉兹,曾经研究过这个猜想。在1960年,日本人角谷静夫也研究过这个猜想。但这猜想到目前,仍没有任何进展。

保羅·艾狄胥就曾称,数学上尚未为此类问题提供答案。他并称会替找出答案的人奖赏500元。

目前已经有分布式计算在进行验证。到2009年1月18日,已验证正整数到 5 × 260 = 5,764,607,523,034,234,880,也仍未有找到例外的情况。但是这并不能够证明对於任何大小的数,这猜想都能成立。

有的数学家认为,该猜想任何程度的解决都是现代数学的一大进步,将开辟全新的领域。目前也有部分数学家和数学爱好者,在进行关于“负数的3x+1”、“5x+1”、“7x+1”等種種考拉兹猜想的變化形命題的研究。

2019年12月,陶哲轩证明只要是一个趋于正无穷的实数列,那么几乎对所有的正整数 (在对数密度意义下) ,有[1][2]

计算机验证

Pascal

var input:longint;
    begin
      read(input);
       writeln(input);
       while input <> 1 do
           begin
         if input mod 2 = 0 then
         input:=(input div 2)
            else input:=(input*3+1);
                writeln(input);
                    end;
       end.

Python

以下是这个猜想的Python版本代码。它会在答案得到1时停下来,以避免作1→4→2→1这个无限循环。

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. . Quantamagazine. 2019-12-11 [2019-12-16].
  2. Terence Tao. . arXiv. 2019-09-13 [2019-12-16].

相關條目

外部連結

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.