Volver a los desafíos
Intermedio 0 resueltos 0% de aceptación

Listar Primos con un Criba

Encuentra números primos hasta un límite marcando los múltiplos compuestos.

Lo que aprenderás

  • Marcar compuestos en un array booleano
  • Empezar a tachar en p × p
  • Reunir los primos restantes

Problema

Ver original (inglés)

Devuelve todos los números primos desde 2 hasta limit. Un primo es un entero mayor que 1 divisible solo por 1 y por sí mismo. Usa la idea de la criba: conserva el siguiente número no marcado y marca como compuestos sus múltiplos mayores. Lista los resultados en orden ascendente.

Implementa sieve_primes(limit).

Entrada

limit: El número más grande que puede incluirse.

Salida

Devuelve los primos en orden ascendente, o una lista vacía si no existe ninguno.

Restricciones

0 ≤ limit ≤ 100,000. El límite superior es inclusivo. Las pruebas de salida verifican los resultados, no el algoritmo exacto utilizado.

Ejemplos

Ejemplo 1
Entrada:
limit = 12

Salida esperada:
expected = [2, 3, 5, 7, 11]
Entrada:
long long limit = 12;

Salida esperada:
std::vector<long long> expected = {2, 3, 5, 7, 11};
Entrada:
long limit = 12;

Salida esperada:
long[] expected = new long[] {2, 3, 5, 7, 11};

Explicación

Marca los múltiplos de 2 y 3 como compuestos. Los valores restantes hasta 12 son 2, 3, 5, 7 y 11.

Ejemplo 2
Entrada:
limit = 1

Salida esperada:
expected = []
Entrada:
long long limit = 1;

Salida esperada:
std::vector<long long> expected = {};
Entrada:
long limit = 1;

Salida esperada:
long[] expected = new long[] {};

Explicación

Los números primos comienzan en 2, más allá de este límite.

Cómo abordarlo

Inténtalo primero por tu cuenta y luego abre las pistas una a una.

Pista 1

Marca los compuestos empezando desde cada candidato primo no marcado y continúa hasta el límite.

Pista 2

Solo los números que sigan sin marcar al final son primos.

Pista 3

Deja de marcar múltiplos cuando el cuadrado del candidato supere el límite.

Complejidad esperada

tiempo O(n log log n), espacio extra O(n)

Referencias

Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.

Aprende de otros

Soluciones de la comunidad

Aún no hay soluciones publicadas. Resuelve este reto para compartir la primera.