2016年7月18日月曜日

160718(2)

Ruby


a(n) = a(n - 1) * (1 + a(n - 2) / a(n - 4)), a(0) = a(1) = a(2) = a(3) = 1 について

この漸化式を変形すると、
a(n) / a(n - 1) = 1 + a(n - 2) / a(n - 4)
よって、b(n) = a(n) / a(n - 1) とおくと、
b(n) = 1 + b(n - 2) * b(n - 3)
となる。
この関係式を利用してコードを書いた。

オンライン整数列大辞典の
A253853(http://oeis.org/A253853/list)、
A253832(http://oeis.org/A253832/list)
と比較し、答え合わせしてみる。

def A253853(n)
  a, b, c = 1, 1, 1
  ary = [1]
  while ary.size < n + 1
    a, b, c = b, c, 1 + a * b
    ary << a
  end
  ary
end

def A253832(n)
  d_ary = A253853(n)
  s = 1
  ary = [s]
  i = 0
  while i < n
    s *= d_ary[i]
    ary << s
    i += 1
  end
  ary
end

ary = A253853(21)
# OEIS A253853のデータ
ary0 =
[1,1,1,2,2,3,5,7,16,36,113,577,4069,65202,2347814,
 265306939,153082168429,622891345681347,
 40613761521380428832,95353557892558423217593864,
 25297960567233966143149250083396705,
 3872666660463510383775257066365338059531886849]
# 一致の確認
p ary == ary0

ary = A253832(17)
# OEIS A253832のデータ
ary0 =
[1,1,1,1,2,4,12,60,420,6720,241920,27336960,
 15773425920,64182070068480,4184799332605032960,
 9825130460280752853949440,
 2606675287692747620296839987164160,
 399035505430293222012069797891526139192304640]
# 一致の確認
p ary == ary0

出力結果
true
true

0 件のコメント:

コメントを投稿

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