ZODIACの黙示録

なにもしないことをする

コラッツの問題をHaskellで書いてみた

ドカべンと可憐ヌー

この記事は

IQが1 Advent Calendar 2017 - Adventarの6日目の記事です。

おちんちんなんかにまけないんだからねっ!///

先ず結論を言おう。
おちんちんに負けました...

おちんちんに負けないために毎月末に快楽天を買っています。もちろん紙媒体です。電子書籍は味気ないとマキシマの旦那も言っている。

コラッツの問題とは

これですコラッツの問題 - Wikipedia

簡単に説明すると任意(日本語的な意味で)の1以上の自然数から始まる数列で、偶数ならば次項を割る2したものとして、奇数ならば3倍して1を足したものとする漸化式です。IQが1なので全く意味がわかりませんが、任意(forallの意味で)の1以上の自然数から初めて1に収束するという予想だそうです。まだ証明されていません。数学者ポール・エルデシュは「数学はまだこの種の問題に対する用意ができていない」と述べています。解決した人に500ドルを提供するという懸賞問題です。おちんちんなんかにまけないんだからね?///

やってみた

以下がコード。

collatz x | x == 1         = [1]
          | x `mod` 2 == 0 = [x] ++ collatz (x `div` 2)
          | x `mod` 2 /= 0 = [x] ++ collatz (x*3+1)

無限リストです。x に初期値をかませます。
wikipediaにもありますが、初期値に27を選ぶと、数列の生成が111ステップにもなり、最大値が9232まで膨れ上がります。

この問題の肝は不確定性だと思っていて、任意の1以上の数から始められることと、そこから生成される数列が予想できないというところですかね。ゴルドバッハ予想と関連があったりするのかなあ(もにゃもにゃ)。

ではでは。