class Primer::Generator

Attributes

n[R]

Public Class Methods

new(n:) click to toggle source
# File lib/primer/generator.rb, line 5
def initialize(n:)
  @n = n
end

Public Instance Methods

first_primes() click to toggle source
# File lib/primer/generator.rb, line 9
def first_primes
  sieve.first(n)
end

Private Instance Methods

max_prime() click to toggle source
# File lib/primer/generator.rb, line 28
def max_prime
  # Rosser's theorem
  n * (Math.log(n) + Math.log(Math.log(n)))
end
numbers_to_sieve() click to toggle source
# File lib/primer/generator.rb, line 24
def numbers_to_sieve
  @numbers ||= Array.new(2, nil) + (2..max_prime).to_a
end
sieve() click to toggle source
# File lib/primer/generator.rb, line 15
def sieve
  numbers_to_sieve.each do |num|
    next unless num
    break if num**2 > max_prime
    (num**2).step(max_prime, num) { |idx| numbers_to_sieve[idx] = nil }
  end
  numbers_to_sieve.compact
end