コラッツの問題をHaskellで書いてみた
おちんちんなんかにまけないんだからねっ!///
先ず結論を言おう。
おちんちんに負けました...
おちんちんに負けないために毎月末に快楽天を買っています。もちろん紙媒体です。電子書籍は味気ないとマキシマの旦那も言っている。
コラッツの問題とは
簡単に説明すると任意(日本語的な意味で)の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以上の数から始められることと、そこから生成される数列が予想できないというところですかね。ゴルドバッハ予想と関連があったりするのかなあ(もにゃもにゃ)。
ではでは。