require 'progressbar' def increasingSieve(size) startingSize = 10 eSieve = [] while eSieve.length < size eSieve = sieve(startingSize) startingSize *= 2 end eSieve end def sieve(n) eSieve = (2..n).to_a i = 0 pbar = ProgressBar.new("sieving", n) while i < Math.sqrt(n) j = i + 1 while (j < eSieve.length) if (eSieve[j] > (i ** 2)) and ((eSieve[j] % eSieve[i]) == 0) eSieve.delete_at j pbar.inc end j += 1 end i += 1 pbar.set(i + (n-eSieve.length)) end pbar.finish eSieve end puts increasingSieve(10001)[10000]