美文网首页
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是否

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