Collat​​z猜想代码在13到19之间“弹跳”

时间:2011-11-07 07:08:28

标签: c

我正在尝试解决项目euler上的问题14,而我最初的蛮力尝试让我感到难过。出于某种原因,代码遇到了一个介于13和19之间的循环。我不认为我可以正确地进行非暴力方法,除非我能首先得到蛮力方法至少正确计算。 我的代码如下所示:

unsigned int loop(unsigned int n) 
{
    unsigned int count = 0;
    while(1) 
    {
        while(is_even(n)) 
        {
            n /= 2;
        }
        if(n > 1)
            n = (n * 3) + 1;
        else
            break;
        count++;
        printf("%d,", n);
    }
    printf("%d\n", n);
    return count;
}

is_even(n)计算为“n& 0x01”。

有谁能告诉我为什么输出是连续的(理论上无穷无尽的)“13,19”流重复?

1 个答案:

答案 0 :(得分:3)

如果n & 0x01 奇数,则

1将为n,如果甚至,则为is_even。更改!(n & 0x01)以返回{{1}}。