at_yasu's blog

ロード的なことを

3*n+1

アルゴリズムの問題に、3*n+1問題というのがあります。これは、「nが偶数の時 n を2で割り、nが奇数の時 3でnをかけ+1すると、nは最終的に1になるのは何故か」というやつです。


以下、プログラム。

#include <stdio.h>
#include <stdint.h>

int
loop (const unsigned long long int startNumber)
{
        unsigned long long int v = startNumber;
        int   c = 0;

        while (v != 1) {
                c++;
                if (v % 2 == 0)
                        v /= 2;
                else
                        v = 3*v+1;
        }
        return c;
}

int
main (void)
{
        unsigned long long int i = 10;

        for (i = 10; i < UINTMAX_MAX; i++) {
                printf("%Lu\t%d\n",i, loop(i));
        }
}


後でグラフ化