見出し画像

コラッツ予想をプログラムで試してみる(Ruby)

コラッツ予想とは・・・
どんな数でも以下ルールを繰り返すと必ず1になるという予想。

  • 奇数だったら、3倍して1を足す

  • 偶数だったら、2で割る

例えば、100だと、
100 → 50 → 25 → 12 → 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1
と、1になる。

本当かなと試してみたくなるのが人情。

紙にいくつか書いて計算したけど、大変なのでプログラムを作りました。

では実行してみましょう。
先ずは上記の100を試してみます。
ちなみ環境は
$ ruby -v
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux-gnu]Ruby3

です。

$ ruby collatz_predict.rb 100
100 / 2 = 50
50 / 2 = 25
3 * 25 + 1 = 76
76 / 2 = 38
38 / 2 = 19
3 * 19 + 1 = 58
58 / 2 = 29
3 * 29 + 1 = 88
88 / 2 = 44
44 / 2 = 22
22 / 2 = 11
3 * 11 + 1 = 34
34 / 2 = 17
3 * 17 + 1 = 52
52 / 2 = 26
26 / 2 = 13
3 * 13 + 1 = 40
40 / 2 = 20
20 / 2 = 10
10 / 2 = 5
3 * 5 + 1 = 16
16 / 2 = 8
8 / 2 = 4
4 / 2 = 2
2 / 2 = 1

良さそうです。
経過が見たかったのでこのような出力にしています。
27だとどうでしょう。

$ ruby collatz_predict.rb 27
3 * 27 + 1 = 82
82 / 2 = 41
3 * 41 + 1 = 124
124 / 2 = 62
62 / 2 = 31
3 * 31 + 1 = 94
94 / 2 = 47
3 * 47 + 1 = 142
142 / 2 = 71
3 * 71 + 1 = 214
214 / 2 = 107
3 * 107 + 1 = 322
322 / 2 = 161
3 * 161 + 1 = 484
484 / 2 = 242
242 / 2 = 121
3 * 121 + 1 = 364
364 / 2 = 182
182 / 2 = 91
3 * 91 + 1 = 274
274 / 2 = 137
3 * 137 + 1 = 412
412 / 2 = 206
206 / 2 = 103
3 * 103 + 1 = 310
310 / 2 = 155
3 * 155 + 1 = 466
466 / 2 = 233
3 * 233 + 1 = 700
700 / 2 = 350
350 / 2 = 175
3 * 175 + 1 = 526
526 / 2 = 263
3 * 263 + 1 = 790
790 / 2 = 395
3 * 395 + 1 = 1186
1186 / 2 = 593
3 * 593 + 1 = 1780
1780 / 2 = 890
890 / 2 = 445
3 * 445 + 1 = 1336
1336 / 2 = 668
668 / 2 = 334
334 / 2 = 167
3 * 167 + 1 = 502
502 / 2 = 251
3 * 251 + 1 = 754
754 / 2 = 377
3 * 377 + 1 = 1132
1132 / 2 = 566
566 / 2 = 283
3 * 283 + 1 = 850
850 / 2 = 425
3 * 425 + 1 = 1276
1276 / 2 = 638
638 / 2 = 319
3 * 319 + 1 = 958
958 / 2 = 479
3 * 479 + 1 = 1438
1438 / 2 = 719
3 * 719 + 1 = 2158
2158 / 2 = 1079
3 * 1079 + 1 = 3238
3238 / 2 = 1619
3 * 1619 + 1 = 4858
4858 / 2 = 2429
3 * 2429 + 1 = 7288
7288 / 2 = 3644
3644 / 2 = 1822
1822 / 2 = 911
3 * 911 + 1 = 2734
2734 / 2 = 1367
3 * 1367 + 1 = 4102
4102 / 2 = 2051
3 * 2051 + 1 = 6154
6154 / 2 = 3077
3 * 3077 + 1 = 9232
9232 / 2 = 4616
4616 / 2 = 2308
2308 / 2 = 1154
1154 / 2 = 577
3 * 577 + 1 = 1732
1732 / 2 = 866
866 / 2 = 433
3 * 433 + 1 = 1300
1300 / 2 = 650
650 / 2 = 325
3 * 325 + 1 = 976
976 / 2 = 488
488 / 2 = 244
244 / 2 = 122
122 / 2 = 61
3 * 61 + 1 = 184
184 / 2 = 92
92 / 2 = 46
46 / 2 = 23
3 * 23 + 1 = 70
70 / 2 = 35
3 * 35 + 1 = 106
106 / 2 = 53
3 * 53 + 1 = 160
160 / 2 = 80
80 / 2 = 40
40 / 2 = 20
20 / 2 = 10
10 / 2 = 5
3 * 5 + 1 = 16
16 / 2 = 8
8 / 2 = 4
4 / 2 = 2
2 / 2 = 1

紆余曲折経てやっぱり1になるんですね。
皆さんも1になるか試してみてはいかがでしょうか。

ソースコードは以下の通りです。

ファイル名:collatz_predict.rb
内容:

ここから先は

280字

¥ 100

この記事が気に入ったらサポートをしてみませんか?