Collatz予想の収束までのステップ数の最大値
http://ll.jus.or.jp/2006/blog/doukaku2
LLRingの「キミならどう書く 2.0」でお題がでてたので、rubyで書いてみた。素朴なメモ化以外の工夫なし。コメントはずすとメモした値が見れます。
@memo = {1=>1} def g(n) @memo[n] ||= 1 + if (n % 2) == 0 then g(n/2) else g(n*3+1) end end def h(n) max = k = 1 (2..n).each do |i| step = g(i) next if max > step k = i max = step end return k end k = h(ARGV.shift.to_i) #p @memo.sort p k
あー、Nabetaniさん(http://d.hatena.ne.jp/Nabetani/20060711#p1)のとほとんど同じコードだな、これ。