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を超えるような初期値が時々現れる。
同じ操作回数を持つ初期値が連続して、もしくは、近くに集まっているのが分かる。