Collatz問題 #5

初期値と操作回数の対応を詳細に見てみる。

...snip
int main(void)
{
    mpz_t x, iter;
    mpz_inits(x, iter, NULL);
    mpz_set_ui(x, 1UL);
    while (mpz_cmp_ui(x, 100UL) <= 0) {
        collatz(iter, x);
        gmp_printf("%Zu %Zu\n", x, iter);
        mpz_add_ui(x, x, 1UL);
    }
    mpz_clears(x, iter, NULL);
    return 0;
}

初期値1から100における実行結果は、

1 0
2 1
3 7
4 2
5 5
6 8
7 16
8 3
...snip
93 17
94 105
95 105
96 12
97 118
98 25
99 25
100 25

であり、この範囲では97から始めて118回の操作で1に至るのが最長である。
gnuplotでチャートを描く。

set xlabel "initial number"
set ylabel 'number of iterations'
unset key
plot 'i100.dat' every 2 pt 7, 'i100.dat' every 2::1 lt 3 pt 7


偶数の初期値を青、奇数の初期値を赤でプロットしている。
基本的に初期値が大きくなるにしたがってゆっくりと増加する傾向がある。
それに混じって操作回数が100を超えるような初期値が時々現れる。
同じ操作回数を持つ初期値が連続して、もしくは、近くに集まっているのが分かる。