2015年7月26日日曜日

150726(4)

Ruby


Bell number(1)

オンライン整数列大辞典の
A000110(http://oeis.org/A000110/list)
と比較し、答え合わせしてみる。
(余談になるが、ベル数を求めていると、
「争いのない状態」というものが奇跡に近い
ことのように思えてきた。)

def bell(n)
  return 1 if n == 0
  i = 1
  bell = [1]
  while i < n
    next_bell = [bell[-1]]
    # Bell triangle
    i.times{|j| next_bell[j + 1] = next_bell[j] + bell[j]}
    bell = next_bell
    i += 1
  end
  bell[-1]
end

def A000110(n)
  (0..n).map{|i| bell(i)}
end
ary = A000110(26)

# OEIS A000110のデータ
ary0 =
[1,1,2,5,15,52,203,877,4140,21147,115975,678570,
 4213597,27644437,190899322,1382958545,10480142147,
 82864869804,682076806159,5832742205057,
 51724158235372,474869816156751,4506715738447323,
 44152005855084346,445958869294805289,
 4638590332229999353,49631246523618756274]
# 一致の確認
p ary == ary0

0 件のコメント:

コメントを投稿

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