35
春休み自由研究 コラッツ予想

春休み自由研究 コラッツ予想

Embed Size (px)

Citation preview

春休み自由研究コラッツ予想

コラッツ予想とは…任意の正の整数(1以上) n について、

● n が偶数なら n / 2● n が奇数なら 3n + 1

この操作を繰り返し適用すると、どんなnについてもきっと1になる!

● 7 → 22 → 11 → 34 → 17 → 52 → 26 → 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

簡単そうに見えるけど……1937年にローター・コラッツにより提唱されてから、

2016年4月現在、未解決予想

5×260までは1になることを確かめたとのことです……。

プログラマーの視点で遊ぶ

● 数を2進数で見る。○ 7 = 111(2)○ 6 = 110(2)

● 先頭ビットが0なら右シフト○ 110 → 11

● 先頭ビットが1なら

○ 101

1010 左シフト (2n)

1111 元の値と加算 (2n + n)10000 1を足す

● つまり、単純なビット判定・ビットシフト・加算だけで表現できる!

数をビット配列で見る

プログラミング的都合から、桁の数え方を逆にします。

10 = [0,1,0,1] = 0101 左が低位ビット、上が高位ビット

5 = 1016 = 0117 = 1118 = 00011234567890 = 0100101101000000011010011001001

などなど

7が処理される様子

[ 0] 111[ 1] 01101[ 2] 1101[ 3] 010001[ 4] 10001[ 5] 001011[ 6] 01011[ 7] 1011[ 8] 000101[ 9] 00101[10] 0101[11] 101[12] 00001[13] 0001[14] 001[15] 01[16] 1

ビット列で見直すと

0100101101000000011010011001001

1010011001001

どうすれば

D言語くんを

助けられるのだろうか?

コラッツ予想の反例を探す

1に収束しないということは、

● 無限に発散できないか?

● どこか1より大きい有限の値でループしないか?

3n+1の伸びかた

基本的には3nなので、1ステップでlog23 ≒1.58桁くらい増える

01101000000011010011001001

010110100000001101001100100110101101000000011010011001001

n / 2の減り方

0000011001001

0が続くと、増えるチャンスが無いまま喰われてしまう

11001001

1が立っていれば、(3n+1) / 2で、差し引き0.58桁くらい増える

D言語くん救出計画

● 桁が増える方向には上限がある。(約1.58桁)● 下からの桁の削除は、0が連続していれば何桁でも削られてしまう。

● だが、もし神のようなビット列があって、下に1を多く出現させることができたら?

111111111100000000000000000001神

ビット列でプログラミングする

使えそうなメンバーを紹介するぜ!

● 111000111000……といったビット列は、3n+1の2ステップで1の連続になる○ 11100011100○ 011100011101○ 10101010101○ 1111111111111○ ※ +1は遥か下のビットと見なして無視しています。

● 1111……というビット列は、前のビットを高位ビットにワープさせる○ 1 + 1111…..11○ 0000000 ... 001

アルゴリズム妄想

● 11100011100 … といったビット列を用意する。

●    の直前で111111111000000...0001といったビット列に変化させる。

● が111...111を喰っている間に、ワープ先で新たに111000111000...を用意

する。

周期的にこんなビット列が作れるよう

プログラミングできれば、

D言語くん救出成功!

1010011001001

0100101101000000011010011001001

1010011001001

これ無理でしょ……なぜ無理か?→それが証明できてもコラッツ問題解決!

もちろん正確な証明はできていないのですが……。

111111111100000000000000000001神

100101101110101101110101001011神

いずれ神も喰われる

前から3nのビット列が落ちてくる

0101001011

3nのビット列おいしいです!

ランダムな歯抜けのビット列で、平均 2桁ずつ”喰える”

3n+1で、初期値の情報が保存されない

● 加算(XORと桁上げ)は情報を壊す作用があるみたい……。

● 3nでは、実はビット数が増えるパターンは孤立した”1”のみ。○ 1 → 11○ 11 → 1001○ 111 → 10101○ 1111 → 101101○ 11111 → 1011101○ つまり、n個の1の連続は、10 (1がn-2個) 01になる。1が増えず、歯抜けになっていく。

● 3nが作るビットパターンはランダムに近い○ 無理数を計算する過程そのものだから?

○ 実測したところ、3n+1の1ステップで平均2桁ずつ削られる。

○ 伸びるほうは約1.6桁ずつなので、いずれ桁が全て喰われてしまう。

メルセンヌ素数2255-1の収束の様子

メルセンヌ素数2255-1の収束の様子(前半拡大)

参考:1に3n+1を繰り返し適用した場合

参考:単純な3nの場合(3n + 1と大差ない)

参考:単純な3nの場合(拡大)

参考:2255-1×3nの場合

これから

● 3nは自分自身を使ったハッシュ計算に似ていて、暗号理論や情報エントロピーとの

関連がありそう。

○ 2n-1といった偏った (1通りしかない)ビット列から、徐々に類似パターンの多いビット列に変化してい

く。

● コラッツ予想のような、状態に対して繰り返し同じ計算を適用する漸化式は、物理

法則の簡単なモデルとも考えられそうな気がする。

○ 宇宙は、物理法則の再帰的な適用によって、情報の詰まった初期状態から現在の均一な状態に

なった、とも見なせる。