Solución
solution.tsTypeScript
export function sieveOfEratosthenes(n: number): number[] {
if (n < 2) return []
// 1 Crear arreglo booleano tamaño 'n + 1' inicializado a true
const esPrimo: boolean[] = Array(n + 1).fill(true)
// 2 Marcar los indices 0 y 1 como false, ya que no son primos
esPrimo[0] = false
esPrimo[1] = false
// 3 Recorrer los numeros desde 2 hasta la raiz cuadrada de 'n'
for (let i = 2; i <= Math.sqrt(n); i++) {
// Si 'i' es primo, marcar todos sus multiplos como false
if (esPrimo[i]) {
for (let j = i * i; j <= n; j += i) {
esPrimo[j] = false
}
}
}
const result: number[] = []
// 4 Extraer los indices que permanecen en true (son primos)
for (let i = 2; i <= n; i++) {
if (esPrimo[i]) result.push(i)
}
return result;
}
0respuestas