カプレカ数
コードを書いてみた。
オンライン整数列大辞典の
A099009(http://oeis.org/A099009/list)
と比較し、答え合わせしてみる。
def kaprekar_numbers(m)
m_ary = []
numbers = (0..9).to_a
numbers.repeated_combination(m){|c_ary|
# 後述のnが9の倍数ということはc_aryの和も9の倍数
if c_ary.inject(:+) % 9 == 0
min_ary = c_ary.clone
min = min_ary.join.to_i
max = min_ary.reverse.join.to_i
n = max - min
m_ary << n if c_ary == n.to_s.split('').map(&:to_i).sort
end
}
m_ary.sort
end
N = 20
ary = [0]
m = 2
while ary.size < N
kaprekar_numbers(m).each{|i| ary << i}
m += 1
end
ary = ary[0..N - 1]
# OEIS A099009のデータ
ary0 =
[0,495,6174,549945,631764,63317664,97508421,
554999445,864197532,6333176664,9753086421,
9975084201,86431976532,555499994445,633331766664,
975330866421,997530864201,999750842001,
8643319766532,63333317666664]
# 一致の確認
p ary == ary0
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。