Imprimir todos los números primos
En este paso, completará la implementación del Criba de Eratóstenes imprimiendo todos los números primos encontrados en el rango dado.
Modifiquemos el archivo prime_sieve.c
para agregar la funcionalidad de impresión:
cd ~/project
nano prime_sieve.c
Actualice el código para imprimir números primos:
#include <stdio.h>
#include <stdbool.h>
int main() {
int upper_limit;
printf("Enter the upper limit for finding prime numbers: ");
scanf("%d", &upper_limit);
// Cree una matriz booleana para marcar números primos y no primos
bool is_prime[upper_limit + 1];
// Inicialice todos los números como primos
for (int i = 2; i <= upper_limit; i++) {
is_prime[i] = true;
}
// Marque los múltiplos de cada número primo como no primo
for (int p = 2; p * p <= upper_limit; p++) {
if (is_prime[p]) {
// Marque los múltiplos de p como no primos
for (int i = p * p; i <= upper_limit; i += p) {
is_prime[i] = false;
}
}
}
// Imprima todos los números primos
printf("Prime numbers up to %d are:\n", upper_limit);
for (int p = 2; p <= upper_limit; p++) {
if (is_prime[p]) {
printf("%d ", p);
}
}
printf("\n");
return 0;
}
Compile y ejecute el programa:
gcc prime_sieve.c -o prime_sieve
./prime_sieve
Salida de ejemplo:
Enter the upper limit for finding prime numbers: 50
Prime numbers up to 50 are:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
Analicemos los pasos finales:
- Después de marcar los múltiplos, iteramos a través de la matriz
is_prime
- Imprimimos solo los números que permanecen marcados como primos
- La salida muestra todos los números primos hasta el límite especificado por el usuario