鱼C论坛

 找回密码
 立即注册
查看: 635|回复: 19

题目14:找出100万以下最长的考拉兹序列

[复制链接]
发表于 2023-7-5 18:35:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 欧拉计划 于 2023-8-5 23:11 编辑

题目14:找出100万以下最长的考拉兹序列


Longest Collatz sequence

The following iterative sequence is defined for the set of positive integers:

n → n/2 (n is even)
n → 3n + 1 (n is odd)

Using the rule above and starting with 13, we generate the following sequence:

13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms.

Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1.

Which starting number, under one million, produces the longest chain?

NOTE: Once the chain starts the terms are allowed to go above one million.

  
题目翻译:

以下迭代序列定义在整数集合上:

  • n → n/2 (当 n 是偶数时)
  • n → 3n + 1 (当 n 是奇数时)

应用以上规则,并且以数字 13 开始,我们得到以下序列:

13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

可以看出这个以 13 开始以 1 结束的序列包含 10 个项。

虽然还没有被证明(考拉兹猜想),但是人们认为在这个规则下,以任何数字开始都会以 1 结束。

以哪个不超过 100 万的数字开始,能给得到最长的序列?

注意: 一旦序列开始之后,也就是从第二项开始,项是可以超过 100 万的。


视频讲解:




思路解析及源码参考(C & Python):

游客,如果您要查看本帖隐藏内容请回复


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-5 18:37:49 | 显示全部楼层
首楼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-7-5 18:40:53 | 显示全部楼层


不要光占楼不回答问题~

让我们一起享受思考带来的快乐吧!



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-5 18:50:15 | 显示全部楼层
欧拉计划 发表于 2023-7-5 18:40
不要光占楼不回答问题~

让我们一起享受思考带来的快乐吧!
  1. def get_length(n):
  2.     length = 0
  3.     while n != 1:
  4.         n = (3 * n + 1) if n % 2 else (n // 2)
  5.         length += 1
  6.     return length

  7. longest_length = 0
  8. longest_n = 0
  9. for i in range(1, 100_0000):
  10.     length = get_length(i)
  11.     if length > longest_length:
  12.         longest_length = length
  13.         longest_n = i
  14. print(longest_n)
复制代码

837799
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-6 17:04:17 | 显示全部楼层
记忆化搜索好像会爆掉,数字最大可以达到 56991483520

只能暴力查找好像
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-7 15:51:49 | 显示全部楼层
zhangjinxuan 发表于 2023-7-6 17:04
记忆化搜索好像会爆掉,数字最大可以达到 56991483520

只能暴力查找好像

可以优化,因为有非常多的冗余计算。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-7 15:55:02 | 显示全部楼层
欧拉计划 发表于 2023-7-7 15:51
可以优化,因为有非常多的冗余计算。

如果不能全部记下来就很……恼)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-12 11:01:57 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-12 15:17:23 | 显示全部楼层
def Kolaz(n):
    count = 1
    while n != 1:
        if n % 2 == 0:
            n = n // 2
            count += 1
        elif n % 2 == 1:
            n = 3*n + 1
            count += 1
    return count

max_count = 1
for i in range(1000000,1,-1):
    count = Kolaz(i)
    if count > max_count:
        max_count = count
        t = i

print(t)
print(max_count)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-24 22:13:10 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-1 18:01:24 | 显示全部楼层
^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-2 13:54:52 | 显示全部楼层
  1. A={1:1}
  2. def B():
  3.     a=1
  4.     m=1
  5.     for i in range(2,1000001):
  6.         count=0
  7.         b=i
  8.         while b!=1:
  9.             if b in A:
  10.                 break
  11.             elif b%2==0:
  12.                 b=b//2
  13.             else:
  14.                 b=3*b+1
  15.             count+=1
  16.         A[i]=count+A[b]
  17.         if m<A[i]:
  18.             a=i
  19.             m=A[i]
  20.     return a,m


  21. print(B())
  22. (837799, 525)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-12 10:36:49 From FishC Mobile | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-12 12:29:31 | 显示全部楼层
这个是经典题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 13:41:23 From FishC Mobile | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-20 15:13:59 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-10 22:32:09 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-4 16:44:38 | 显示全部楼层
刷到第十四提了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-4 21:07:45 | 显示全部楼层
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-19 22:49:59 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-18 01:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表