X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=primes.rb;h=7e2cfaacaa817e2418271d2544961271b0bb245a;hb=f4d0d9084352d850254d228d4b9605c6fd699de5;hp=0febe8007f617dd2b3ecbca2eae02a72ef41cd57;hpb=b0fb3e87a6e12cfe1203e44aed2caaf7b7d8c959;p=project-euler.git diff --git a/primes.rb b/primes.rb index 0febe80..7e2cfaa 100644 --- a/primes.rb +++ b/primes.rb @@ -28,7 +28,9 @@ class Primes def next_prime candidate = next_candidate(@primes[-1]) - while @primes.any? {|i| candidate % i == 0 } + limit = Math.sqrt(candidate).floor + index = @primes.bsearch_index {|i| i > limit} || @primes.length + while @primes[0..index].any? {|i| candidate % i == 0 } candidate = next_candidate(candidate) end candidate @@ -90,11 +92,20 @@ class Primes end def include?(n) - while n >= @primes.max + while n >= @primes.last add_next_prime! end - @primes.include?(n) + # @primes.include?(n) + !!(@primes.bsearch {|i| n - i}) end end + +class Integer + @@primes = Primes.instance + + def prime? + @@primes.include? self + end +end