2021年10月9日土曜日

211009

Ruby


Stirling number

第1種スターリング数および第2種スターリング数を計算してみた。
第1種については
「数の本」、「コンピュータの数学」
にある通り、符号なしで出力してみる。

# 符号は無視
def stirling(n, k = 1)
  a = [1]
  p [0, a]
  (1..n).each{|i|
    a << 0
    b = [0]
    (0..i - 1).each{|j|
      if k == 2
        b[j + 1] = a[j] + (j + 1) * a[j + 1]
      else
        b[j + 1] = a[j] + (i - 1) * a[j + 1]
      end
    }
    a = b
    p [i, a]
  }
end

n = 10
stirling(n)
p ""
stirling(n, 2)

出力結果
[0, [1]]
[1, [0, 1]]
[2, [0, 1, 1]]
[3, [0, 2, 3, 1]]
[4, [0, 6, 11, 6, 1]]
[5, [0, 24, 50, 35, 10, 1]]
[6, [0, 120, 274, 225, 85, 15, 1]]
[7, [0, 720, 1764, 1624, 735, 175, 21, 1]]
[8, [0, 5040, 13068, 13132, 6769, 1960, 322, 28, 1]]
[9, [0, 40320, 109584, 118124, 67284, 22449, 4536, 546, 36, 1]]
[10, [0, 362880, 1026576, 1172700, 723680, 269325, 63273, 9450, 870, 45, 1]]
""
[0, [1]]
[1, [0, 1]]
[2, [0, 1, 1]]
[3, [0, 1, 3, 1]]
[4, [0, 1, 7, 6, 1]]
[5, [0, 1, 15, 25, 10, 1]]
[6, [0, 1, 31, 90, 65, 15, 1]]
[7, [0, 1, 63, 301, 350, 140, 21, 1]]
[8, [0, 1, 127, 966, 1701, 1050, 266, 28, 1]]
[9, [0, 1, 255, 3025, 7770, 6951, 2646, 462, 36, 1]]
[10, [0, 1, 511, 9330, 34105, 42525, 22827, 5880, 750, 45, 1]]

0 件のコメント:

コメントを投稿

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