Imprimir Todos os Números Primos
Nesta etapa, você completará a implementação do Crivo de Eratóstenes imprimindo todos os números primos encontrados dentro do intervalo fornecido.
Vamos modificar o arquivo prime_sieve.c para adicionar a funcionalidade de impressão:
cd ~/project
nano prime_sieve.c
Atualize o código para imprimir os números primos:
#include <stdio.h>
#include <stdbool.h>
int main() {
int upper_limit;
printf("Digite o limite superior para encontrar números primos: ");
scanf("%d", &upper_limit);
// Crie um array booleano para marcar números primos e não primos
bool is_prime[upper_limit + 1];
// Inicialize todos os números como primos
for (int i = 2; i <= upper_limit; i++) {
is_prime[i] = true;
}
// Marque múltiplos de cada número primo como não primos
for (int p = 2; p * p <= upper_limit; p++) {
if (is_prime[p]) {
// Marque múltiplos de p como não primos
for (int i = p * p; i <= upper_limit; i += p) {
is_prime[i] = false;
}
}
}
// Imprima todos os números primos
printf("Números primos até %d são:\n", upper_limit);
for (int p = 2; p <= upper_limit; p++) {
if (is_prime[p]) {
printf("%d ", p);
}
}
printf("\n");
return 0;
}
Compile e execute o programa:
gcc prime_sieve.c -o prime_sieve
./prime_sieve
Exemplo de saída:
Digite o limite superior para encontrar números primos: 50
Números primos até 50 são:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
Vamos analisar as etapas finais:
- Após marcar os múltiplos, iteramos pelo array
is_prime.
- Imprimimos apenas os números que permanecem marcados como primos.
- A saída mostra todos os números primos até o limite especificado pelo usuário.