コラッツの問題を解決したい1
私の一大プロジェクト「コラッツ予想を解く!」
目標は無謀な方がいいということで、数年前から始まったプロジェクト。メンバー一人。
ということで本日調べるのはこれ!
コラッツ関数をn回繰り返して初めて1になる数字の中で一番小さい数値を出力せよ
処理したとき小さくなるか大きくなるかはまだ一般的にはわからないですから、本気でさかのぼっていくしか無いですね。
Haskellはちょっとまだ勉強中なのでlistが扱いやすいpythonで。
def colat(a,b=None): if b==None: b=[1] if a==0: b.sort() return b[0] for i in range(len(b)): t=b.pop() b.insert(0,2*t) #とりあえず2倍 if t%6==4 and t!=4: b.insert(0,(t-1)/3) #1引いて3で割って奇数になる物 return colat(a-1,b)
まぁこれといってたいしたことはしてないですね もろにqueueを使ってますが。
これの欠点! すごくオーダーがでかい
colat(111)で27が欲しかったのにおそらく数千年かかっちゃう。
なんとかできないものか。 昼にでも考えよう。