-- sieve of eratosthenes

function primes (n)

    max_index = math.floor((n-1)/2)

    v = {}
    for i = 1, max_index do
        v[i] = true
    end

    p = 3
    while p*p <= n do
        i = math.floor(p/2)
        if v[i] then
            for j = 2*i*(i+1), max_index, p do
                v[j] = false
            end
        end
        p = p + 2
    end

    ps = {2}
    for i = 1, max_index do
        if v[i] then
            table.insert(ps, 2*i+1)
        end
    end

    return ps

end

print(#(primes(1000)))
