 
 This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Generating Prime Numbers | ||
|---|---|---|
| Code | Expected | Actual | 
| require 'mathn' primes = Prime.new primes.succ | 2 | 2 | 
| primes.succ | 3 | 3 | 
| primes.each { |x| puts x; break if x > 15; } | 5 7 11 13 17 | 5 7 11 13 17 | 
| primes.succ | 19 | 19 | 
| def sieve(max=100)
  sieve = []
  (2..max).each { |i| sieve[i] = i }
  (2..Math.sqrt(max)).each do |i|
    (i*i).step(max, i) { |j| sieve[j] = nil } if sieve[i]
  end
  sieve.compact
end
sieve(10) | [2, 3, 5, 7] | [2, 3, 5, 7] | 
| sieve(100000).size | 9592 | 9592 | 
| require 'mathn'
class Prime
  @@primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 
            61, 67, 71, 73, 79, 83, 89, 97, 101]
  @@check_next = 103
  # @@primes[3] < sqrt(@@check_next) < @@primes[4]
  @@limit = 3
  # sqrt(121) == @@primes[4]
  @@increment_limit_at = 121
  def succ
    @index += 1
    while @index >= @@primes.length
      if @@check_next + 4 > @@increment_limit_at
        @@limit += 1
        @@increment_limit_at = @@primes[@@limit + 1] ** 2
      end
      add_if_prime
      @@check_next += 4
      add_if_prime
      @@check_next += 2 
    end
    return @@primes[@index]
  end
  def initialize
    @index = -1    
  end
  :private
  def add_if_prime
    factor = @@primes[2..@@limit].find { |prime| @@check_next % prime == 0 }
    @@primes << @@check_next unless factor
  end
end
primes = Prime.new
p = nil
10000.times { p = primes.succ }
p | 104729 | 104729 | 
| class Prime
  def prime?(n)
    succ() while @seed < n
    return @primes.member?(n)
  end
end
def probably_prime?(x)
  x < 8
end
probably_prime? 2 | true | true | 
| probably_prime? 5 | true | true | 
| probably_prime? 6 | true | true | 
| probably_prime? 7 | true | true | 
| probably_prime? 8 | false | false | 
| probably_prime? 100000 | false | false |