2015年7月20日月曜日

150720(2)

Ruby


Collatz conjecture(1)

1に到達するまでの数列の長さを求めるコードを書いてみた。
オンライン整数列大辞典の
A006577(http://oeis.org/A006577/list)
と比較し、答え合わせしてみる。

def collatz(n)
  return 0 if n == 1
  return 1 + collatz(n / 2) if n % 2 == 0
  return 1 + collatz(3 * n + 1)
end

def A006577(n)
  (1..n).map{|i| collatz(i)}
end
ary = A006577(72)

# OEIS A006577のデータ
ary0 =
[0,1,7,2,5,8,16,3,19,6,14,9,9,17,17,4,12,20,20,7,
 7,15,15,10,23,10,111,18,18,18,106,5,26,13,13,21,
 21,21,34,8,109,8,29,16,16,16,104,11,24,24,24,11,
 11,112,112,19,32,19,32,19,19,107,107,6,27,27,27,
 14,14,14,102,22]
# 一致の確認
p ary == ary0

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。