数学でまだ証明されていない問題として、《コラッツの問題》というものがある。
C言語でコラッツの問題の確認計算するプログラムを作ってみた。
コラッツの問題とは?
ある数を思い浮かべる。
もしその数が偶数なら2で割る。奇数なら3を掛けて1足す。
同じようにして繰り返すと…
最終的に 1 -> 4 -> 2 -> 1 に収束するという話。
実はこの《コラッツの問題》は、まだ数学的に証明されていない。
例えば偶数の場合

奇数の場合

ある数を27とすると100回以上計算が必要になるので、プログラムにやらせてみる。
コラッツ問題を計算するC言語プログラム
collatz_mondai.c
/* コラッツの問題 ある数を思い浮かべる。 もしその数が偶数なら2で割る。奇数なら3を掛けて1足す。 同じようにして繰り返すと... 最終的に 1 -> 4 -> 2 -> 1 に収束するという話。 実はこの《コラッツの問題》は、まだ数学的に証明されていない。 */ #include <stdio.h> int main(void) { int n; /* ある数 */ int pattern[] = {1, 4, 2, 1}; /* 収束するパターン */ int pattern_no = 0; /* パターンの番号 */ int count = 0; /* 収束パターンカウント用 */ /* ある数を入力 */ printf("ある数を思い浮かべてね: "); scanf("%d", &n); printf("\n"); /* コラッツ問題をスタート */ while(1){ if(n % 2 == 0){ /* 偶数の場合 */ n = n / 2; } /* 奇数の場合 */ else{ n = n * 3 + 1; } /* 計算回数カウント */ count++; /* 回数と計算結果表示 */ printf("%5d回目)\t%10d\n", count, n); /* 計算結果が収束パターンに一致しているか? */ if(n == pattern[pattern_no]){ pattern_no++; } /* 収束パターンが全て一致したら終了 */ if(pattern_no == 4) break; } return 0; }
プログラムの実行結果
ある数を10として実行
ある数を思い浮かべてね: 10 1回目) 5 2回目) 16 3回目) 8 4回目) 4 5回目) 2 6回目) 1 7回目) 4 8回目) 2 9回目) 1
27でもやってみる
ある数を思い浮かべてね: 27 1回目) 82 2回目) 41 3回目) 124 4回目) 62 5回目) 31 6回目) 94 7回目) 47 8回目) 142 9回目) 71 10回目) 214 11回目) 107 12回目) 322 13回目) 161 14回目) 484 15回目) 242 16回目) 121 17回目) 364 18回目) 182 19回目) 91 20回目) 274 21回目) 137 22回目) 412 23回目) 206 24回目) 103 25回目) 310 26回目) 155 27回目) 466 28回目) 233 29回目) 700 30回目) 350 31回目) 175 32回目) 526 33回目) 263 34回目) 790 35回目) 395 36回目) 1186 37回目) 593 38回目) 1780 39回目) 890 40回目) 445 41回目) 1336 42回目) 668 43回目) 334 44回目) 167 45回目) 502 46回目) 251 47回目) 754 48回目) 377 49回目) 1132 50回目) 566 51回目) 283 52回目) 850 53回目) 425 54回目) 1276 55回目) 638 56回目) 319 57回目) 958 58回目) 479 59回目) 1438 60回目) 719 61回目) 2158 62回目) 1079 63回目) 3238 64回目) 1619 65回目) 4858 66回目) 2429 67回目) 7288 68回目) 3644 69回目) 1822 70回目) 911 71回目) 2734 72回目) 1367 73回目) 4102 74回目) 2051 75回目) 6154 76回目) 3077 77回目) 9232 78回目) 4616 79回目) 2308 80回目) 1154 81回目) 577 82回目) 1732 83回目) 866 84回目) 433 85回目) 1300 86回目) 650 87回目) 325 88回目) 976 89回目) 488 90回目) 244 91回目) 122 92回目) 61 93回目) 184 94回目) 92 95回目) 46 96回目) 23 97回目) 70 98回目) 35 99回目) 106 100回目) 53 101回目) 160 102回目) 80 103回目) 40 104回目) 20 105回目) 10 106回目) 5 107回目) 16 108回目) 8 109回目) 4 110回目) 2 111回目) 1 112回目) 4 113回目) 2 114回目) 1
試して見ると本当に4⇒2⇒1と収束する。
わたしの頭ではコラッツの問題を証明できないような数の発見はできないが、もしあるとすれば夢がある。
コメント