Method: Euler#generate_sieve

Defined in:
lib/euler.rb

#generate_sieve(max) ⇒ Object

A basic prime sieve. Sets Euler.sieve to an array of boolean values that indicate if that index if prime or not.

Euler.generate_sieve(50)
Euler::sieve[2] # => true
Euler::sieve[4] # => false


122
123
124
125
126
127
128
129
130
131
# File 'lib/euler.rb', line 122

def generate_sieve(max)
  @sieve = Array.new(max, false)
  @sieve[2] = true
  3.step(max, 2) { |x| @sieve[x] = true}
  3.step(Math.sqrt(max).to_i, 2) { |i|
    if @sieve[i]
      (i**2).step(max, 2*i) { |x| @sieve[x] = false}
    end
  }
end