今天是Andy学Python的第33 天哦!
大家好,我是Andy。
昨天做完题,对collatz函数进一步拓展了解,发现这是一个“简单”的但迄今为止尚未完全证明的猜想。
01.
项目背景
任取一个大于1的正整数,如果是偶数,将其除以2;如果是奇数,将其乘以3加1;重复这个过程,最后结果都是1。这个问题就是著名的“克拉茨猜想”。它几乎可以说是数学史上未解问题中表达形式最简单的一个,也因此成为数学这棵参天大树上最诱人的那颗果实。
克拉茨猜想,在德国,由数学家Lothar Collatz于上世纪30年代提出。克拉茨猜想在传播过程中,收获了许多名字:3n+1猜想、奇偶归一猜想、冰雹猜想、乌拉姆(Ulam)问题、角谷猜想等。目前,数学家们测试了几百亿亿个数,结果克拉茨猜想全部是正确的。
目前,数学家们测试了几百亿个数,结果克拉茨猜想全部是正确的。
然而问题在于,数学家们也没办法证明一定不存在一个特殊的数,在这一操作下最终不在1上收敛。有可能存在一个特别巨大的数,在这一套操作下趋向于无穷,或者趋向于一个除了1以外的循环的数。
但没有人能证明这些特例的存在。
02.
项目需求
# 定义一个collatz序列函数,参数为任一正整数,通过collatz变形,最终收敛为1,每步返回数值增加到列表。
# 验证1-1000的collatz序列列表。
03.
Py001
开始的想法是利用昨天现成的函数,实验发现,输出列表不方便,动不动陷入死循环。
尝试将collatz函数与循环放入一个函数,先定义一个空列表,每次返回数据添加到列表中。最终如下:
# collatz序列生成列表
def collatz_sequence(x):
seq = [x]
while seq[-1] > 1:
if x % 2 == 0:
seq.append(x // 2)
else:
seq.append(3 * x + 1)
x = seq[-1]
return seq
#验证1-10
for i in range(1,10):
print(collatz_sequence(i))
04.
Py002
验证1-1000,程序正常。
如果你对克拉茨猜想感兴趣,可将上述代码拿走,验证百亿以上整数是否符合猜想(运行程序前,最好找性能可靠的电脑)。
51Day Day up!
向上向善,日进一步!
每天学习,努力成长!
定个小目标,开启成长的旅程,遇见更好的自己。
这是我们和自己的约定,许诺自己不负韶华。
路虽远,行则将至;事虽难,做则必成。
成长的最好时机,就是当下。
网友评论