2015年7月27日月曜日

150727(3)

Ruby


Ramanujan's tau function(1)

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

def mul(f_ary, b_ary)
  s1, s2 = f_ary.size, b_ary.size
  ary = Array.new(s1 + s2 - 1, 0)
  (0..s1 - 1).each{|i|
    (0..s2 - 1).each{|j|
      ary[i + j] += f_ary[i] * b_ary[j]
    }
  }
  ary
end

def power(ary, n)
  return [1] if n == 0
  mul(ary, power(ary, n - 1))
end

def A000594(n)
  ary = [1]
  # 無限積のうち必要なところだけ取り出す
  (1..n - 1).each{|i|
    b_ary = Array.new(i + 1, 0)
    b_ary[0], b_ary[-1] = 1, -1
    ary = mul(ary, b_ary)
  }
  # 24乗してx倍
  power(ary, 24).unshift(0)[1..n]
end
ary = A000594(28)

# OEIS A000594のデータ
ary0 =
[1,-24,252,-1472,4830,-6048,-16744,84480,-113643,
 -115920,534612,-370944,-577738,401856,1217160,
 987136,-6905934,2727432,10661420,-7109760,
 -4219488,-12830688,18643272,21288960,-25499225,
 13865712,-73279080,24647168]
# 一致の確認
p ary == ary0

0 件のコメント:

コメントを投稿

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