2018-03-02 22:27:55 +00:00
|
|
|
class Prime
|
|
|
|
attr_reader :primes
|
|
|
|
|
|
|
|
def self.nth(n)
|
|
|
|
raise ArgumentError.new('N must be positive') if n < 1
|
2018-03-09 20:13:37 +00:00
|
|
|
sieve(50 * n)[n - 1]
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.sieve(n)
|
|
|
|
(2..Math.sqrt(n)).each_with_object([nil, nil, *2..n]) do |p, res|
|
|
|
|
(p*p).step(n, p) { |m| res[m] = nil }
|
|
|
|
end.compact
|
2018-03-02 22:27:55 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
module BookKeeping
|
|
|
|
VERSION = 1
|
|
|
|
end
|