美文网首页
Day033|Collatz 序列生成列表并验证1-1000是否

Day033|Collatz 序列生成列表并验证1-1000是否

作者: 龙渊的宝藏 | 来源:发表于2021-03-28 23:06 被阅读0次

今天是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!

向上向善,日进一步!

每天学习,努力成长!

定个小目标,开启成长的旅程,遇见更好的自己。

这是我们和自己的约定,许诺自己不负韶华。

路虽远,行则将至;事虽难,做则必成。

成长的最好时机,就是当下。

相关文章

  • Day033|Collatz 序列生成列表并验证1-1000是否

    今天是Andy学Python的第33天哦! 大家好,我是Andy。 昨天做完题,对collatz函数进一步拓展了解...

  • Collatz序列

    编写一个名为collatz()的函数,它有一个名为number 的参数。如果参数是偶数,那么collatz()就打...

  • Collatz 序列

    编写一个名为collatz()的函数,它有一个名为number的参数: 如果参数是偶数,那么collatz()就打...

  • 《Python编程快速上手—让繁琐工作自动化》第3章实践项目答案

    3.11.1 Collatz 序列 项目要求:编写一个名为collatz()的函数,它有一个名为number的参数...

  • 3.Python-列表,元组,字典和集合

    列表 Python中列表是一个有序的序列。空列表 可以用 [] 或者 list() 生成.列表用一对 []生成,中...

  • W1

    作业2: 该列表为无序列表,其中语言、编辑器用空格进行布局。其中无序列表用 包裹列表有序列表用 包裹列表并都使...

  • 二. 数据类型:序列类型

    分为可变和不可变序列。 序列通用操作(以列表为例) 生成序列 list(‘abcd’) -> [‘a’,’b’,’...

  • Markdown 语法

    基础 标题 引用 有序列表 无需按序列写,全部写1.即可自动生成序列 无序列表 代码区块 分割线 链接 []内填充...

  • [python]练习笔记2

    filter和列表生成器的区别1.列表生成器接受的是序列,string、tuple、range、set、list、...

  • CANS_Exercise_2

    Zn*的构造并验证是否为群 1.生成素数 使用random伪随机函数随机生成在区间(0,1000]的数,判定是否为...

网友评论

      本文标题:Day033|Collatz 序列生成列表并验证1-1000是否

      本文链接:https://www.haomeiwen.com/subject/ibdkhltx.html