2015年6月7日日曜日

150607

Ruby


各桁の和と自身との和について

(「ピーター・フランクルの中学生でも分かる大学生にも解けない数学問題集②」
CHAPTER3のProblem4の一般化から)

自然数nをp進法で表したときの各桁の数の和をf(n)で表す。
a + f(a) = b + f(b) = c + f(c)
を満たすような,3つの異なる自然数a,b,cは存在だろうか。

元々は p = 10 で、
a = 10^13 - 108,
b = 10^13 - 99,
c = 10^13
等が条件を満たす。

さて、これを p < 8 のとき、力づくで解いた。

M = 7
N = 13

def f(i, m)
  return i if i < m
  s = 0
  s += i % m + f(i / m, m)
  s
end

(2..M).each{|m|
  h = {}
  (1..m ** N).each{|i|
    j = i + f(i, m)
    h.key?(j) ? h[j] = h[j].push(i) : h[j] = [i]
    if h[j].size == 3
      p [m, h[j].map{|k| k.to_s(m)}]
      break
    end
  }
}

出力結果
[2, ["1111011", "1111100", "10000000"]]
[3, ["212", "220", "1000"]]
[4, ["3333232", "3333301", "10000000"]]
[5, ["34", "41", "100"]]
[6, ["555555452", "555555501", "1000000000"]]
[7, ["55", "61", "100"]]

0 件のコメント:

コメントを投稿

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