📜  最大序列长度 |科拉兹猜想(1)

📅  最后修改于: 2023-12-03 15:10:35.502000             🧑  作者: Mango

最大序列长度 | 科拉茲猜想

简介

科拉茲猜想,也称为3n+1猜想,是指对于任意正整数n,若n为偶数,则将n除以2,否则将n乘以3加1,得到一个新的整数,如此重复操作,最终结果一定会是1。这个猜想虽然没有被完全证明,但是已经通过计算机模拟得到了超过50亿的验证,因此被广泛认为是成立的。

在这个猜想中,我们可以将每次得到的新整数看做图中的节点,如果两个节点之间存在一条边,则表示从一个节点可以到达另一个节点。通过这样的建模,我们可以得到一个有向图,从任意一个节点开始,执行科拉茲猜想后,最终都可以走到节点1。

本篇文章将探讨如何通过代码实现科拉茲猜想,并找出从给定的起点出发,经过多少个节点可以达到节点1,即最大序列长度。

代码实现

下面是使用Python实现科拉茲猜想的代码:

def collatz_sequence(n: int) -> List[int]:
    sequence = [n]
    while n != 1:
        if n % 2 == 0:
            n = n // 2
        else:
            n = 3 * n + 1
        sequence.append(n)
    return sequence

def max_sequence_length(n: int) -> int:
    max_length = 0
    for i in range(1, n + 1):
        sequence = collatz_sequence(i)
        max_length = max(max_length, len(sequence))
    return max_length

代码中的collatz_sequence函数接受一个正整数n,返回一个列表,列表中存储的是从n开始,执行科拉茲猜想后所得到的序列。

max_sequence_length函数则接受一个正整数n,返回从1到n的所有数中,执行科拉茲猜想所得到序列的最大长度。

测试示例
assert collatz_sequence(1) == [1]
assert collatz_sequence(2) == [2, 1]
assert collatz_sequence(3) == [3, 10, 5, 16, 8, 4, 2, 1]
assert max_sequence_length(10) == 20
assert max_sequence_length(100) == 119
assert max_sequence_length(9999) == 262
总结

科拉茲猜想虽然难以证明,但是通过实现代码,我们可以验证它的正确性,同时也能够理解到从计算机的角度来看,它是如何被模拟和验证的。同时,我们还可以通过计算科拉茲猜想所产生的序列的最大长度,来推断出具有一定规律的数学性质。