Number of palindromic and unimodal compositions of n
例えば、n = 6 のとき、
1 + 2 + 2 + 1,
1 + 4 + 1,
などがある。
この山を横に切ると、
4 + 2,
3 + 1 + 1 + 1,
…,
となる。
この操作からわかるように、
p(n | 和因子が線対称な山型に並ぶ)
= p(n | 和因子は偶数) + p(n | 和因子は奇数)
が成り立つ。
オンライン整数列大辞典の
A035363(http://oeis.org/A035363/list)、
A000009(http://oeis.org/A000009/list)、
A096441(http://oeis.org/A096441/list)
と比較し、答え合わせしてみる。
def A035363(n)
even = []
2.step(n, 2){|i| even << i}
ps0 = Array.new(n + 1){0}
ps0[0] = 1
even.each{|num|
(num..n).each{|i|
ps0[i] += ps0[i - num]
}
}
ps0
end
def A000009(n)
odd = []
1.step(n, 2){|i| odd << i}
ps1 = Array.new(n + 1){0}
ps1[0] = 1
odd.each{|num|
(num..n).each{|i|
ps1[i] += ps1[i - num]
}
}
ps1
end
def A096441(n)
ps0, ps1 = A035363(n), A000009(n)
(1..n).map{|i| ps0[i] + ps1[i]}
end
ary = A035363(69)
# OEIS A035363のデータ
ary0 =
[1,0,1,0,2,0,3,0,5,0,7,0,11,0,15,0,22,0,30,0,42,0,
56,0,77,0,101,0,135,0,176,0,231,0,297,0,385,0,490,
0,627,0,792,0,1002,0,1255,0,1575,0,1958,0,2436,0,
3010,0,3718,0,4565,0,5604,0,6842,0,8349,0,10143,0,
12310,0]
# 一致の確認
p ary == ary0
ary = A000009(55)
# OEIS A000009のデータ
ary0 =
[1,1,1,2,2,3,4,5,6,8,10,12,15,18,22,27,32,38,46,
54,64,76,89,104,122,142,165,192,222,256,296,340,
390,448,512,585,668,760,864,982,1113,1260,1426,
1610,1816,2048,2304,2590,2910,3264,3658,4097,4582,
5120,5718,6378]
# 一致の確認
p ary == ary0
ary = A096441(55)
# OEIS A096441のデータ
ary0 =
[1,2,2,4,3,7,5,11,8,17,12,26,18,37,27,54,38,76,54,
106,76,145,104,199,142,266,192,357,256,472,340,
621,448,809,585,1053,760,1354,982,1740,1260,2218,
1610,2818,2048,3559,2590,4485,3264,5616,4097,7018,
5120,8728,6378]
# 一致の確認
p ary == ary0
true
true
true
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。