考拉兹猜想
| 此条目需要补充更多来源。 (2019年12月16日) |
| 未解决的数学问题:对所有自然数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1。 |
考拉兹猜想(英语: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。
数目少于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]
计算机验证编辑
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
参考资料编辑
- ^ Kevin Hartnett. Mathematician Proves Huge Result on ‘Dangerous’ Problem. Quantamagazine. 2019-12-11 [2019-12-16].
- ^ Terence Tao. Almost all orbits of the Collatz map attain almost bounded values. arXiv. 2019-09-13 [2019-12-16].