Skip to content

Instantly share code, notes, and snippets.

@tdg5
Last active August 29, 2015 14:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tdg5/965171f8c068970fb1b1 to your computer and use it in GitHub Desktop.
Save tdg5/965171f8c068970fb1b1 to your computer and use it in GitHub Desktop.
Sieve generated prime finder
class PrimeFinder
attr_reader :limit, :primes
def initialize(limit)
@limit = limit
@primes = []
generate_primes!(limit)
end
def prime?(candidate)
sqr_root = Math.sqrt(candidate)
primes.each do |prime|
return false if candidate % prime == 0
break if prime > sqr_root
end
true
end
def inspect
"#<PrimeFinder:#{object_id}>"
end
private
def generate_primes!(limit)
primes.clear
sieve = [true] * limit
sieve[0] = sieve[1] = false
(2..limit).each do |candidate|
is_candidate_prime = sieve[candidate]
next unless is_candidate_prime
primes << candidate
candidate.step(limit, candidate) do |composite|
sieve[composite] = false
end
end
end
end
# prime_finder = PrimeFinder.new(1_000_000)
# prime_finder.prime?(999983)
# => true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment