langs-performance/primes-alt.lua

47 lines
694 B
Lua

function get_primes7(n)
if n < 2 then return {} end
if n == 2 then return {2} end
local s = {}
local c = 1
for i = 3, n, 2 do
s[c] = i
c = c + 1
end
local mroot = math.floor(math.sqrt(n))
local half = #s
local i = 0
local m = 3
while m <= mroot do
if s[i+1] and s[i+1] ~= 0 then
local j = math.floor((m*m-3)/2) -- int div
s[j+1] = 0
while j < half do
s[j+1] = 0
j = j + m
end
end
i = i + 1
m = 2*i + 3
end
local res = {}
res[1] = 2
local c = 2
for x = 1, #s do
if s[x] ~= 0 then
res[c] = s[x]
c = c + 1
end
end
return res
end
for i = 1, 30 do
local res = get_primes7(10000000)
print("Found " .. #res .. " prime numbers.")
end