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