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}