Project Euler: Problem14 (改良版)

あまりにも遅いので人の解答を参考にした。ディクショナリ(ハッシュ?)のキーを文字列にしているのはなんかよくわからん。文字列のほうがいいものなのかな?

class Problem10
  def Problem10.calc(last)
    primes = {}
    (2...last).each {|n| primes[n.to_s] = n}

    (2...last).each {|n|
      c = n + n
      while c < last
        primes.delete(c.to_s)
        c += n
      end
    }

    result = 0
    primes.each {|_,v| result += v}
    return result
  end
end

p Problem10.calc(2_000_000)