2016年2月21日日曜日

160221(3)

Ruby


Number of solutions to +- 1 +- 2 +- 3 +- ... +- n = 0(2)

少し速くしてみた。

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 A063865(n)
  ary = [1]
  ary0 = [1]
  (1..n).each{|k|
    ary1 = Array.new(2 * k + 1, 0)
    ary1[0] = 1
    ary1[-1] = 1
    ary0 = mul(ary0, ary1)
    ary << ary0[k * (k + 1) / 2]
  }
  ary
end

p A063865(100)

出力結果
[1, 0, 0, 2, 2, 0, 0, 8, 14, 0, 0, 70, 124, 0, 0, 722, 1314, 0, 0, 8220, 15272, 0, 0, 99820, 187692, 0, 0, 1265204, 2399784, 0, 0, 16547220, 31592878, 0, 0, 221653776, 425363952, 0, 0, 3025553180, 5830034720, 0, 0, 41931984034, 81072032060, 0, 0, 588491482334, 1140994231458, 0, 0, 8346638665718, 16221323177468, 0, 0, 119447839104366, 232615054822964, 0, 0, 1722663727780132, 3360682669655028, 0, 0, 25011714460877474, 48870013251334676, 0, 0, 365301750223042066, 714733339229024336, 0, 0, 5363288299585278800, 10506331021814142340, 0, 0, 79110709437891746598, 155141342711178904962, 0, 0, 1171806326862876802144, 2300241216389780443900, 0, 0, 17422684839627191647442, 34230838910489146400266, 0, 0, 259932234752908992679732, 511107966282059114105424, 0, 0, 3890080539905554395312172, 7654746470466776636508150, 0, 0, 58384150201994432824279356, 114963593898159699687805154, 0, 0, 878552973096352358805720000, 1731024005948725016633786324]

0 件のコメント:

コメントを投稿

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