Project Euler Problem 5
module Enumerable def product inject(1) {|a, n| a * n } end end def sieve(upper) table = Array.new(upper + 1, false) (2 .. upper).inject([]) do |primes, guess| unless table[guess] primes << guess (guess * 2).step(upper, guess) {|n| table[n] = true } end primes end end def f(upper) n = n0 = sieve(upper).product n += n0 while (2 .. upper).any? {|m| not (n % m).zero? } n end p f(10) p f(20)