1からNまでの整数に対し、「約数の数がs個になる」のはいくつあるか調べるには?
n の約数の個数を d(n) と表すことにする。
1から10までの整数に対し、
d(n) = 1 となるのは1個、
d(n) = 2 となるのは4個、
d(n) = 3 となるのは2個、
d(n) = 4 となるのは3個ある。
一般に、
1からNまでの整数に対し、「約数の数がs個になる」のはいくつあるか調べるには
どうすれば速く求まるでしょうか?
とりあえずなんの工夫もしていないコードをあげておきます。
require 'prime'
N = 10 ** 2
h = {}
(1..N).each{|i|
s = 1
i.prime_division.map{|j| s *= j[1] + 1}
h.key?(s) ? h[s] += 1 : h[s] = 1
}
p h
出力結果
{1=>1, 2=>25, 3=>4, 4=>32, 6=>16, 5=>2, 8=>10, 9=>2, 10=>2, 12=>5, 7=>1}