enum State { Maybe = 0, Prime, NotPrime, } export function primes(limit: number): number[] { const all: number[] = Array(limit + 1).fill(State.Maybe); all[0] = State.NotPrime; all[1] = State.NotPrime; for (let i = 2; i <= limit; i++) { if (all[i] === State.NotPrime) { continue; } all[i] = State.Prime; for (let j = 2; j <= limit / i; j++) { all[i * j] = State.NotPrime; } } const res: number[] = []; let property: keyof typeof all; for (property in all) { if (all[property] === State.Prime) { res.push(Number(property)); } } return res; }