Featured image of post コラッツ予想

コラッツ予想

「どんな数字でも最後は1になる」ってほんと?──コラッツ予想を遊んでみた

こんにちは!kenjiです。

突然ですが、「どんな数字でも最終的に1になるルール」って聞いたら、 ちょっと不思議じゃないですか?

例えば、19とか、87とか、1000000でも。 適当なルールに従って数をいじっていくと、なぜか最後は「1」に収束する。

そんな夢みたいな話が、コラッツ予想(Collatz Conjecture) です。


そもそも、コラッツ予想ってなに?

まずはルールを紹介します。

  • スタート:任意の正の整数を選びます

  • 操作:

    • 偶数なら → 半分にする(n → n / 2)
    • 奇数なら → 3倍して1足す(n → 3n + 1)

これをずーっと繰り返していくと、どんな数字も最終的には1に到達するっていう予想なんですね。

たとえば、6 から始めると:

1
6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1

ちゃんと「1」になりました。おかえりなさい!


コードでやってみよう:Pythonでコラッツ

さて、こういうときはコードで試すのが早い! Pythonで「コラッツ数列」を出力してみましょう。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
def collatz(n):
    steps = [n]
    while n != 1:
        if n % 2 == 0:
            n = n // 2
        else:
            n = 3 * n + 1
        steps.append(n)
    return steps

# 例:19から始めてみる
print(collatz(19))

実行すると:

1
[19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]

みごとに1に到達します。 けっこう寄り道してるのに、最後はしっかりゴールイン!

ちなみに 29 から始めても、同じように1に到達します。

1
pythonprint(collatz(29))

実行すると

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

なんと、111ステップもかかります!

しかも、途中で9000以上まで膨れ上がる場面も。 めちゃくちゃ寄り道してからゴールインするパターンですね。


で、結局なにがすごいの?

この予想の何がすごいかというと、

証明されていないのに、どんな数でやっても1になるっぽい

ってところです。

え?じゃあ、1兆とか、1京(けい)とかは…?

と思った方、鋭い。 実際に計算機を使って「2の68乗」くらいまでは確かめられてて、 すべて1に到達しています。信じられない…。

でも、「全部そうなる」と理論的に証明されたわけではないんです。 これが数学の世界でいう「未解決問題」。


コラッツさんって誰?

で、ここまで読んで「そもそもコラッツって誰?」って思いますよね。 ちゃんと紹介します!

  • 名前:ローズ・コラッツ(Lothar Collatz)
  • 国籍:ドイツ
  • 生年:1910年〜1990年
  • 肩書き:数学者(関数解析や数論の分野で活躍)

1937年にこの予想を提案して、 その後、80年以上にわたって誰も証明も反証もできていません

ちなみに、この問題はあまりにシンプルなのに奥が深すぎて、 あのポール・エルデシュ(超有名数学者)すらこう言ったとか。

「数学はまだコラッツを扱うには未熟だ」

つまり、人類の数学がこの謎にまだ追いついていない説…。


「難しい数式」は必要ない

コラッツ予想のいいところは、誰でも遊べることです。

紙とペンがあればできます。 Pythonでコードを書けば、自動で試せます。 それでいて、最先端の数学者たちが本気で挑んでる

なんか、ワクワクしません?


おまけ:一気に試すコード

いろんな数字をまとめて試すコードも載せておきますね。

1
2
3
for n in range(1, 21):
    steps = collatz(n)
    print(f"{n}: {steps}(ステップ数: {len(steps)-1})")

これは「1~20」のコラッツ数列を一気に出してくれます。


結論:この世界、やっぱり不思議だ

というわけで、コラッツ予想。

  • めちゃシンプルなのに
  • 誰も証明できなくて
  • 数学界では大問題

っていう、不思議のかたまりみたいな存在でした。

プログラミング初心者でも試せるので、ぜひ遊んでみてください〜!


おすすめリンク(興味ある人向け)


もっとこういう「不思議系数学×プログラミング」ネタが知りたい人は、 お気軽に「もっと教えて」とリクエストしてみてください。 そのうち、リーマン予想とか素数の話とか、いろいろ紹介しますね!


📮おわり!


comments powered by Disqus
Hugo で構築されています。
テーマ StackJimmy によって設計されています。