大学院生GENの数学小話 第4回-コラッツ予想

  こんにちは!金曜日13:30~15:00の学生コンシェルジュを担当しております。

理工学研究科数理情報学プログラム2年数学専攻のGENです。
企画などもあり投稿がとまっておりました。結構な間があいて久しぶりになりますね。
今回で4回目となる数学小話の内容はコラッツ予想です。
数学が好きな人は良く知っている人もいるのではないでしょうか?この問題は一億2000万円の懸賞金がかけられているほどの難しい問題で未だ完全な照明はされていません。今回はこの問題について軽く紹介します。

そんな頭のいい数学者が考えても分かってないものを私に理解できるわけないと思う人もいるでしょう。確かに完全に証明をするのはとても難しいです。しかし、コラッツ予想の主張自体はとてもシンプルなものです。中学生ぐらいでも主張を理解することは可能です。

コラッツ予想の主張
どんな自然数でも次の操作を繰り返しをこなえばいつかは1になるだろう
繰り返し操作
奇数ならば3倍して1を足す、偶数ならば2で割る

実際に3でやってみよう。
3は奇数なので3倍して1を足す
3⇒3×3+1=10
10は偶数なので2で割る
3⇒10⇒10÷2=5
5は奇数なので3倍して1を足す
3⇒10⇒5⇒5×3+1=16
16は偶数なので2で割る
3⇒10⇒5⇒16⇒16÷2=8
8は偶数なので2で割る
3⇒10⇒5⇒16⇒8⇒8÷2=4
4は偶数なので2で割る
3⇒10⇒5⇒16⇒8⇒4⇒4÷2=2
2は偶数なので2で割る
3⇒10⇒5⇒16⇒8⇒4⇒2⇒2÷2=1

これをまとめると、
3⇒10⇒5⇒16⇒8⇒4⇒2⇒1
1になってることが分かりました。

試しに7でやると、
7⇒22⇒11⇒34⇒17⇒52⇒26⇒13⇒40⇒20⇒10⇒5
⇒16⇒8⇒4⇒2⇒1

このようにどんな数でもいつかは1にいくであろうというのがコラッツ予想です。

CプログラムでNmaxまでの数が1にいくか確認するものをおいておきます。
もしよかったら他の数でも遊んでみてください。
#include <stdio.h>
int main(void)
{
    int Nmax = 100;

    for(int n = 1; n <= Nmax ;n++){
        int m = n;
        int count = 0;
        printf("%d",n);
        while(m!=1){
            if(m%2!=0){
                m = 3*m +1;
            }else{
                m = m / 2;
            }
            printf("->%d",m);
            count ++;
        }
        printf(" \n %d:%d\n",n,count);
    }
    return 0;
}
※C言語コードはこのサイトに張り付けて実行できるよ。 ブラウザで動く C言語実行環境
コラッツ予想で遊べるサイトをみつけたのでこちらもどうぞ。 Vis Networkを使って「コラッツの問題」を視覚化してみた #JavaScript - Qiita Collatz Visualization