2016-08-05 07:34:41 +03:00
|
|
|
def get_primes7(n)
|
|
|
|
return [] if n < 2
|
|
|
|
return [2] if n == 2
|
|
|
|
|
|
|
|
# do only odd numbers starting at 3
|
|
|
|
s = 3.upto(n + 1).select(&:odd?)
|
|
|
|
|
|
|
|
mroot = n ** 0.5
|
|
|
|
half = s.length
|
|
|
|
i = 0
|
|
|
|
m = 3
|
|
|
|
until m > mroot do
|
|
|
|
if s[i]
|
|
|
|
j = (m * m - 3) / 2
|
|
|
|
s[j] = nil
|
|
|
|
until j >= half do
|
|
|
|
s[j] = nil
|
|
|
|
j += m
|
|
|
|
end
|
|
|
|
end
|
|
|
|
i += 1
|
|
|
|
m = 2 * i + 3
|
|
|
|
end
|
|
|
|
[2] + s.compact
|
|
|
|
end
|
|
|
|
|
2016-09-06 23:47:58 +03:00
|
|
|
loop do
|
2016-08-05 07:34:41 +03:00
|
|
|
res = get_primes7(10000000)
|
|
|
|
puts "Found #{res.length} prime numbers."
|
|
|
|
end
|