【发布时间】:2013-08-31 02:27:57
【问题描述】:
我正在尝试查找数字的 Collatz 序列。以下代码运行到数字 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,则终止
【问题讨论】:
-
做欧拉项目:)
-
@Kamiccolo 在某个点越过 INT_MAX。感谢您的帮助。
-
将
long number更改为unsingned long可能会解决这个问题。因为collatz(113383)产生的链中的最大数字超过了 2^31-1(有符号长)限制。 long 的默认类型(有符号,使用)因编译器而异。 -
@Kamiccolo:不是这样——除非出现大错误,
long在任何 C 或 C++ 编译器上总是完全等同于signed long。 -
@JerryCoffin,哎呀,对不起,我的错误。深夜想int和写longs是不好的:)