2015年8月16日日曜日

150816

Ruby


高次元カタラン数

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

def power(a, n)
  return 1 if n == 0
  k = power(a, n >> 1)
  k *= k
  return k if n & 1 == 0
  return k * a
end

def c(m, n)
  return 1 if n == 0
  # (mn)! / (n! … n!)
  s = (n + 1..m * n).inject(:*)
  s /= power((1..n).inject(:*), m - 1)
  # 1! / (n + 1) * 2! / ((n + 1)(n + 2)) * …
  t, u = 1, 1
  (1..m - 1).each{|i|
    t *= power(m - i, i)
    u *= power(n + m - i, i)
  }
  s * t / u
end

def A000108(n)
  (0..n).map{|i| c(2, i)}
end
ary = A000108(30)

# OEIS A000108のデータ
ary0 =
[1,1,2,5,14,42,132,429,1430,4862,16796,58786,
 208012,742900,2674440,9694845,35357670,129644790,
 477638700,1767263190,6564120420,24466267020,
 91482563640,343059613650,1289904147324,
 4861946401452,18367353072152,69533550916004,
 263747951750360,1002242216651368,3814986502092304]
# 一致の確認
p ary == ary0

def A005789(n)
  (1..n).map{|i| c(3, i)}
end
ary = A005789(19)

# OEIS A005789のデータ
ary0 =
[1,5,42,462,6006,87516,1385670,23371634,414315330,
 7646001090,145862174640,2861142656400,
 57468093927120,1178095925505960,24584089974896430,
 521086299271824330,11198784501894470250,
 243661974372798631650,5360563436201569896300]
# 一致の確認
p ary == ary0

def A005790(n)
  (1..n).map{|i| c(4, i)}
end
ary = A005790(16)

# OEIS A005790のデータ
ary0 =
[1,14,462,24024,1662804,140229804,13672405890,
 1489877926680,177295473274920,22661585038594320,
 3073259571003214320,438091463242348309440,
 65166105157299311029200,
 10056663345892631910888600,
 1602608179958939072505281850,
 262708662267696303439658400600]
# 一致の確認
p ary == ary0

def A005791(n)
  (1..n).map{|i| c(5, i)}
end
ary = A005791(12)

# OEIS A005791のデータ
ary0 =
[1,42,6006,1662804,701149020,396499770810,
 278607172289160,231471904322784840,
 219738059326729823880,232553551737813227594400,
 269396678720275351794712800,
 336839101096824285057473785200]
# 一致の確認
p ary == ary0

# mが6以上
(6..10).each{|m|
  p (1..12).map{|i| c(m, i)}
}

def A060855(n)
  ary = [1]
  ary += (2..n).map{|m| c(m, m + 1)}
end
ary = A060855(9)

# OEIS A060855のデータ
ary0 =
[1,5,462,1662804,396499770810,9490348077234178440,
 32103104214166146088869942000,
 20535535214275361308250745082811167425600,
 3201252689605333194364294895470993505956118059617444000]
# 一致の確認
p ary == ary0

出力結果
true
true
true
true
[1, 132, 87516, 140229804, 396499770810, 1671643033734960, 9490348077234178440, 67867669180627125604080, 583692803893929928888544400, 5838544419011620940996212276800, 66244124978105851196543024492572800, 836288764382254532915188713779640302400]
[1, 429, 1385670, 13672405890, 278607172289160, 9490348077234178440, 475073684264389879228560, 32103104214166146088869942000, 2760171874087743799855959353857200, 289232890341906497299306268771988273600, 35764585916110766978895474668714467232388000, 5090211520903837197691053206565807120363613812000]
[1, 1430, 23371634, 1489877926680, 231471904322784840, 67867669180627125604080, 32103104214166146088869942000, 22081374992701950398847674830857600, 20535535214275361308250745082811167425600, 24486819823897171791550434989846505231774984000, 35969131343880148251284212308662848381529416400196000, 63104222871390776868436403671840272575350277821082450520000]
[1, 4862, 414315330, 177295473274920, 219738059326729823880, 583692803893929928888544400, 2760171874087743799855959353857200, 20535535214275361308250745082811167425600, 220381378415074546123953914908618547085974856000, 3201252689605333194364294895470993505956118059617444000, 59986874261544072491135645330451363110127974096720977464312000, 1396954113804814174072297198141381438063801703166851057080570737180000]
[1, 16796, 7646001090, 22661585038594320, 232553551737813227594400, 5838544419011620940996212276800, 289232890341906497299306268771988273600, 24486819823897171791550434989846505231774984000, 3201252689605333194364294895470993505956118059617444000, 599868742615440724911356453304513631101279740967209774643120000, 152267998404724744973880394597410576748954385645186765221782210352620000, 50106797649691113217459397039765454644914995408023080761564114499343647939320000]
true

0 件のコメント:

コメントを投稿

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