【欧拉计划第 14 题】 最长的考拉兹序列 Longest Collatz sequence

简介: 【欧拉计划第 14 题】 最长的考拉兹序列 Longest Collatz sequence

Problem 14 Longest Collatz sequence

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

n → n 2   ( n   i s   e v e n ) , n → 3 n + 1   (   n   i s   o d d ) \large n\rightarrow \frac{n}{2}\ \left ( n\ is\ even \right ) ,n\rightarrow3n+1\ \left ( \ n\ is\ odd \right )n2n (niseven),n3n+1 (nisodd)

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

13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 \large 13\rightarrow40\rightarrow20\rightarrow10\rightarrow5\rightarrow16\rightarrow8\rightarrow4\rightarrow2\rightarrow1134020105168421

It can be seen that this sequence (starting at 13 1313 and finishing at 1) contains 10 1010 terms. Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1 11.

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

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

问题 14 最长的考拉兹序列

为所有正整数集定义以下迭代序列:

n → n 2   ( n   是 偶 数 ) , n → 3 n + 1   ( n   是 奇 数 ) \large n\rightarrow \frac{n}{2}\ \left ( n\,是偶数 \right ) ,n\rightarrow3n+1\ \left ( n\,是奇数 \right )n2n (n),n3n+1 (n)

使用上面的规则并从 13 1313 开始,生成以下序列:

13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 \large 13\rightarrow40\rightarrow20\rightarrow10\rightarrow5\rightarrow16\rightarrow8\rightarrow4\rightarrow2\rightarrow1134020105168421

可以看出这个序列从 13 1313 开始并到 1 11 结束总共包含 10 1010 个数。

考拉兹猜想指出使用以上迭代规则,所有正整数都会最终回到一,虽然这个猜想仍未得到证明。

求在一百万以下,哪个起始数可以产生最长的考拉兹序列?

注意:序列中包含的数的个数可以超过一百万。

解题报告

考拉兹猜想

考拉兹猜想(Collatz conjecture),又称为奇偶归一猜想、3n+1 猜想、冰雹猜想、角谷猜想、哈塞猜想、乌拉姆猜想或叙拉古猜想,是指对于每一个正整数,如果它是奇数,则对它乘 3 再加 1,如果它是偶数,则对它除以 2,如此循环,最终都能够得到 1

f ( n ) = { n 2 i f   n ≡ 0 3 n + 1 i f   n ≡ 1 ( m o d    2 ) \large f\left ( n \right )=\left\{

n2ifn03n+1ifn1n2ifn≡03n+1ifn≡1

\right.\left .\quad( mod \,\, 2 \right )f(n)={2nifn03n+1ifn1(mod2)

思路分析

其实当你看到题目的时候,不知到你有没有和我想到一块儿去,那必然又是咱滴老朋友暴力算法

显然,我们只要求算出一到一百万之间所有数字的考拉兹序列长度,然后在所有求出的序列长度值中找出最大值就能解决本题

但是可以做一些优化,比如大家都知道当 n 是奇数时,3n+1 一定是偶数。那我们根本没必要让程序重复执行冗余步骤

换言之,当 n 是奇数的时候,在其后追加一步,继续计算 (3n+1)/2。便可省去很多中间计算步骤,程序执行效率自然得到提高

还有一点是参考其他大神写的题解意识到的,就是程序重复计算的问题。较大的数据量在计算过程中可能会产生重复数据,我们是不是可以将所有计算步骤得到的结果做下缓存。这样在下一步遇到重复值时可以直接调用,避免重复计算,提高程序执行效率

或者也可以使用递归法实现本题

代码实现

/*
 * @Author: coder-jason
 * @Date: 2022-05-1 09:00:42
 * @LastEditTime: 2022-05-01 09:13:49
 */
#include <bits/stdc++.h>
using namespace std; 
int cal(long long n) 
{
    if (n == 1)
        return 1;
    if (n % 2)
        return 1 + cal(3 * n + 1);
    else
        1 + cal(n / 2);
}
int main()
{
    int n = 0, ans = 0;
    for (int i = 1; i < 1000000; i++)
    {
        int tmp = cal(i);
        if (tmp > ans)
        {
            n = i;
            ans = tmp;
        }
    }
    cout << n << endl;
    return 0;
}
'''
Author: sorrowise
Date: 2022-05-1 08:42:30
LastEditTime: 2022-05-01 09:13:19
'''
N=10**6
d = {}
for x in range(2,N):
    i,n = x,0
    while x != 1:
        if x < i:
            n = n + d[x]
            break
        elif x % 2 == 0:
            x = x // 2
            n += 1
        else:
            x = (3*x+1) // 2
            n += 2
    d[i] = n
print(max(d,key=d.get))

答案:837799




相关文章
|
数据采集 算法 JavaScript
彩票中奖率的真相:用 JavaScript 看透彩票背后的随机算法(上)
原本这篇文章是打算叫「假如我是彩票系统开发者」,但细想一下,如果在文章中引用太多的 JavaScript 的话,反而不是那么纯粹,毕竟也只是我的一厢情愿,彩票开发也不全如本文所讲,有所误导的话便也是得不偿失了。
|
3月前
|
人工智能 自然语言处理 架构师
智能体来了:AI时代的下一个风口,你准备好了吗?
AI智能体时代已至,从技术变革到职业重塑,正催生全新机遇。“智能体来了”作为国内领先AI职业教育平台,携手顶尖专家,推出覆盖青少年、大学生、企业家的实战课程,助力零基础学员成为智能体创作者。通过“理论+实战+项目孵化+就业直通”模式,手把手教你打造专属智能体IP,掌握AI时代核心竞争力。现已发布“百事通智能体”等实训案例,支持多平台部署。结业获认证证书,对接高薪岗位,赋能个人与企业抢占AI红利。智能体不是未来,是现在。你,准备好了吗?(239字)
|
6月前
|
数据采集 Web App开发 数据可视化
Python爬取闲鱼价格趋势并可视化分析
Python爬取闲鱼价格趋势并可视化分析
|
监控 API 云计算
云计算成本优化:AWS Cost Explorer与预算管理的艺术
【10月更文挑战第27天】在云计算中,成本管理至关重要。本文介绍如何使用AWS Cost Explorer进行成本优化和预算管理。通过案例分析,展示如何创建自定义报告、发现成本动因、检测异常,并创建预算来监控和控制成本。此外,还提供了Python示例代码,帮助用户自动化预算创建过程。
331 4
|
存储 SQL 关系型数据库
MySQL索引下推:原理与实践
MySQL索引下推:原理与实践
|
自然语言处理 Swift
千亿大模型来了!通义千问110B模型开源,魔搭社区推理、微调最佳实践
近期开源社区陆续出现了千亿参数规模以上的大模型,这些模型都在各项评测中取得杰出的成绩。今天,通义千问团队开源1100亿参数的Qwen1.5系列首个千亿参数模型Qwen1.5-110B,该模型在基础能力评估中与Meta-Llama3-70B相媲美,在Chat评估中表现出色,包括MT-Bench和AlpacaEval 2.0。
|
分布式计算 DataWorks MaxCompute
DataWorks产品使用合集之在DataWorks中,如何进行批量复制操作来将一个业务流程复制到另一个业务流程
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
247 0
|
存储 传感器 数据挖掘
请解释一下时序数据库的工作原理,并提供一个使用时序数据库的实际应用场景。
请解释一下时序数据库的工作原理,并提供一个使用时序数据库的实际应用场景。
632 0
|
网络架构
解决VUE3中动态路由参数变化页面不刷新的问题
解决VUE3中动态路由参数变化页面不刷新的问题
2767 0
|
存储 传感器 运维
IoT Studio 产品介绍|学习笔记(一)
快速学习 IoT Studio 产品介绍
IoT Studio 产品介绍|学习笔记(一)