如何修复超过1分钟规则的Collatz序列代码

How to fix my Collatz sequence code that exceeds the 1-minute rule?

本文关键字:Collatz 代码 规则 何修复 1分钟      更新时间:2023-10-16

摘要

大家好。我正在尝试解决与Collatz猜想有关的 - 依行问题。

首先,问题读取如下:

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

n→n/2(n是偶数) n→3n 1(n是奇数)

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

13→40→20→10→5→16→8→4→2→1 可以看出,此序列(从13起,以1的结尾开始)包含> 10个术语。尽管尚未证明它(Collatz问题),但认为所有起始数字均以1。

结束。

哪个起始数字(不到一百万)产生最长的链?

注意:一旦链条开始,允许术语超过100万。

来源:https://projecteuler.net/problem = 14

一个短脚注

最初,我的变量溢出并变得负面问题。虽然,我通过使用 in ,正如我提到的。

代码

#include <iostream>
using namespace std;
int collatz(long long n) {
 if (n%2 == 0) return n/2;
 return 3*n+1;
}
int main() {
    unsigned long long cnt, n, maxcnt=0, num;
    for(int i=1; i<1000000; i++) {
        cnt=1;
        n=i;
        while(n != 1) {
            n=collatz(n);
            cnt++;
        }
        if(cnt>maxcnt) {
            maxcnt=cnt;
            num=i;
        }
    }
    cout<<num;
    return 0;
}

结果

而不是获得任何结果,它只是以无限的回路结束。

好吧,如果您的功能返回int,您并没有真正解决问题的一部分,我想这应该做

unsigned long long collatz(unsigned long long n)