首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数的Collatz数列

数的Collatz数列
EN

Stack Overflow用户
提问于 2013-08-31 10:27:57
回答 1查看 4.2K关注 0票数 0

我在试着找一个数字的Collatz序列。下面的代码运行数字113383的无限循环。

代码语言:javascript
复制
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;
}

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

EN

回答 1

Stack Overflow用户

发布于 2013-08-31 10:48:37

您没有检查该数字是否已溢出您的long。尝试在您的循环中添加以下打印代码:

代码语言:javascript
复制
...
      if (number*3+1 < number) {
        printf("overflow after %d iterations\n", length);
        break;
      }
      number = (number * 3) + 1;
...

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

代码语言:javascript
复制
/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位的情况下也可以解决此问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18543885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档