2015年12月19日土曜日

151219(6)

Ruby


Frobenius number for k consecutive numbers(1)

連続するk個の整数でFrobenius数を求めてみた。
オンライン整数列大辞典の
A028387(http://oeis.org/A028387/list)、
A079326(http://oeis.org/A079326/list)、
A138984(http://oeis.org/A138984/list)、
A138985(http://oeis.org/A138985/list)、
A138986(http://oeis.org/A138986/list)、
A138987(http://oeis.org/A138987/list)、
A138988(http://oeis.org/A138988/list)
と比較し、答え合わせしてみる。

def f(ary)
  # ary = [a, b], (a, b) = 1のとき
  return ary[0] * ary[1] - ary[0] - ary[1] if ary.size == 2
  m = ary.max
  s0 = (1 << m) - 1
  s = 1 << m - 1
  a = 0
  while s != s0
    f_max = a if s >> m - 1 == 0
    a += 1
    s += 1 << m if ary.any?{|i| (s >> m - i) & 1 == 1}
    s >>= 1
  end
  f_max
end

def A028387(n)
  # a(0) = 1から
  (2..n + 3).each_cons(2).map{|a| f(a)}
end

def A079326(n)
  # a(2) = 1から
  n -= 2
  (2..n + 4).each_cons(3).map{|a| f(a)}
end

def A138984(n)
  # a(1) = 1から
  n -= 1
  (2..n + 5).each_cons(4).map{|a| f(a)}
end

def A138985(n)
  # a(1) = 1から
  n -= 1
  (2..n + 6).each_cons(5).map{|a| f(a)}
end

def A138986(n)
  # a(1) = 1から
  n -= 1
  (2..n + 7).each_cons(6).map{|a| f(a)}
end

def A138987(n)
  # a(1) = 1から
  n -= 1
  (2..n + 8).each_cons(7).map{|a| f(a)}
end

def A138988(n)
  # a(1) = 1から
  n -= 1
  (2..n + 9).each_cons(8).map{|a| f(a)}
end

ary = A028387(46)
# OEIS A028387のデータ
ary0 =
[1,5,11,19,29,41,55,71,89,109,131,155,181,209,239,
 271,305,341,379,419,461,505,551,599,649,701,755,
 811,869,929,991,1055,1121,1189,1259,1331,1405,
 1481,1559,1639,1721,1805,1891,1979,2069,2161,2255]
# 一致の確認
p ary == ary0

ary = A079326(54)
# OEIS A079326のデータ
ary0 =
[1,2,7,9,17,20,31,35,49,54,71,77,97,104,127,135,
 161,170,199,209,241,252,287,299,337,350,391,405,
 449,464,511,527,577,594,647,665,721,740,799,819,
 881,902,967,989,1057,1080,1151,1175,1249,1274,
 1351,1377,1457]
# 一致の確認
p ary == ary0

ary = A138984(56)
# OEIS A138984のデータ
ary0 =
[1,2,3,9,11,13,23,26,29,43,47,51,69,74,79,101,107,
 113,139,146,153,183,191,199,233,242,251,289,299,
 309,351,362,373,419,431,443,493,506,519,573,587,
 601,659,674,689,751,767,783,849,866,883,953,971,
 989,1063,1082]
# 一致の確認
p ary == ary0

ary = A138985(57)
# OEIS A138985のデータ
ary0 =
[1,2,3,4,11,13,15,17,29,32,35,38,55,59,63,67,89,
 94,99,104,131,137,143,149,181,188,195,202,239,247,
 255,263,305,314,323,332,379,389,399,409,461,472,
 483,494,551,563,575,587,649,662,675,688,755,769,
 783,797,869]
# 一致の確認
p ary == ary0

ary = A138986(58)
# OEIS A138986のデータ
ary0 =
[1,2,3,4,5,13,15,17,19,21,35,38,41,44,47,67,71,75,
 79,83,109,114,119,124,129,161,167,173,179,185,223,
 230,237,244,251,295,303,311,319,327,377,386,395,
 404,413,469,479,489,499,509,571,582,593,604,615,
 683,695,707]
# 一致の確認
p ary == ary0

ary = A138987(59)
# OEIS A138987のデータ
ary0 =
[1,2,3,4,5,6,15,17,19,21,23,25,41,44,47,50,53,56,
 79,83,87,91,95,99,129,134,139,144,149,154,191,197,
 203,209,215,221,265,272,279,286,293,300,351,359,
 367,375,383,391,449,458,467,476,485,494,559,569,
 579,589,599]
# 一致の確認
p ary == ary0

ary = A138988(59)
# OEIS A138988のデータ
ary0 =
[1,2,3,4,5,6,7,17,19,21,23,25,27,29,47,50,53,56,
 59,62,65,91,95,99,103,107,111,115,149,154,159,164,
 169,174,179,221,227,233,239,245,251,257,307,314,
 321,328,335,342,349,407,415,423,431,439,447,455,
 521,530,539]
# 一致の確認
p ary == ary0

出力結果
true
true
true
true
true
true
true

0 件のコメント:

コメントを投稿

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