gpt4 book ai didi

数字的 Collat​​z 序列

转载 作者:行者123 更新时间:2023-11-30 15:46:09 26 4
gpt4 key购买 nike

我正在尝试查找数字的 Collat​​z 序列。以下代码对数字 113383 执行无限循环。

int collatz(long number)    {
int length = 1; //length of the sequence
while (number != 1) {
printf("%ld-", number);
if ((number % 2) == 0)
number /= 2;
else
number = (number * 3) + 1;
length++;
}
return length;
}
int main() {
printf("%d", collatz(113383));
return 0;
}

编辑:科拉茨猜想说序列中的下一个数字是如果数字是偶数,则为 n/2如果数字是奇数则为 3n+1如果数字为 1,则终止

最佳答案

您没有检查该数字是否超出了您的long。尝试在循环中添加以下打印内容:

...
if (number*3+1 < number) {
printf("overflow after %d iterations\n", length);
break;
}
number = (number * 3) + 1;
...

请注意,这是否会溢出 long 将取决于系统/目标:

/tmp/c $ gcc -o collatz -m32 collatz.c
/tmp/c $ ./collatz
overflow after 120 iterations
/tmp/c $ gcc -o collatz -m64 collatz.c
/tmp/c $ ./collatz
<answer redacted>

您还可以考虑使用 unsigned long long,即使在 32 位中,它也应该足够大来解决此问题。

关于数字的 Collat​​z 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18543885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com