Introdução
Neste laboratório, aprenderemos a verificar se um número é primo na programação em C. O laboratório consiste em três etapas: ler uma entrada inteira do utilizador, testar a divisibilidade de 2 até à raiz quadrada do número e imprimir se o número é primo ou não. No final deste laboratório, terá um programa funcional que pode determinar a primalidade de um inteiro dado.
O laboratório começa ensinando como ler uma entrada inteira do utilizador usando a função scanf(). Em seguida, apresenta o algoritmo de verificação de números primos, que envolve testar a divisibilidade de 2 até à raiz quadrada do número de entrada. Se nenhum divisor for encontrado, o número é considerado primo. Finalmente, o programa imprime o resultado, indicando se o número é primo ou não.
Ler um Inteiro
Nesta etapa, aprenderemos a ler uma entrada inteira do utilizador em programação C. Esta é a primeira etapa na criação de um verificador de números primos.
Primeiro, vamos criar um novo ficheiro C para o nosso programa de verificação de números primos:
cd ~/project
nano prime_checker.c
Agora, vamos escrever o código para ler um inteiro:
#include <stdio.h>
int main() {
int number;
printf("Introduza um inteiro positivo para verificar se é primo: ");
scanf("%d", &number);
printf("Introduziu: %d\n", number);
return 0;
}
Exemplo de saída:
Introduza um inteiro positivo para verificar se é primo: 17
Introduziu: 17
Vamos decompor o código:
#include <stdio.h>inclui a biblioteca de entrada/saída padrãoint main()é a função principal onde a execução do programa começaint number;declara uma variável inteira para armazenar a entrada do utilizadorprintf()exibe um prompt para o utilizadorscanf()lê uma entrada inteira do utilizador e armazena-a emnumberprintf()confirma o número introduzido pelo utilizador
Compile e execute o programa:
gcc prime_checker.c -o prime_checker
./prime_checker
Testar Divisibilidade de 2 a √n
Nesta etapa, iremos implementar o algoritmo de verificação de números primos, testando a divisibilidade de 2 até à raiz quadrada do número de entrada.
Vamos modificar o nosso programa C anterior para adicionar a lógica de verificação de números primos:
nano ~/project/prime_checker.c
Atualize o código com o teste de divisibilidade:
#include <stdio.h>
#include <math.h>
int is_prime(int number) {
// Números inferiores a 2 não são primos
if (number < 2) {
return 0;
}
// Verificar a divisibilidade de 2 até à raiz quadrada do número
for (int i = 2; i <= sqrt(number); i++) {
if (number % i == 0) {
return 0; // Não é primo se for divisível
}
}
return 1; // Primo se nenhum divisor for encontrado
}
int main() {
int number;
printf("Introduza um inteiro positivo para verificar se é primo: ");
scanf("%d", &number);
if (is_prime(number)) {
printf("%d é um número primo.\n", number);
} else {
printf("%d não é um número primo.\n", number);
}
return 0;
}
Compile o programa com a biblioteca matemática:
gcc ~/project/prime_checker.c -o ~/project/prime_checker -lm
Exemplos de saídas:
Introduza um inteiro positivo para verificar se é primo: 17
17 é um número primo.
Introduza um inteiro positivo para verificar se é primo: 20
20 não é um número primo.
Pontos chave sobre a implementação:
- A função
sqrt()de<math.h>calcula a raiz quadrada - Só verificamos a divisibilidade até √n para otimizar o algoritmo
- Se nenhum divisor for encontrado, o número é primo
- O operador módulo
%verifica a divisibilidade - Devolvemos 0 para números não primos e 1 para números primos
Imprimir se Primo ou Não
Nesta etapa final, iremos melhorar o nosso programa de verificação de números primos, adicionando saídas mais detalhadas e permitindo verificações múltiplas de números.
Vamos modificar o programa para fornecer uma saída mais abrangente:
nano ~/project/prime_checker.c
Atualize o código com uma interface melhorada:
#include <stdio.h>
#include <math.h>
int is_prime(int number) {
// Números inferiores a 2 não são primos
if (number < 2) {
return 0;
}
// Verificar a divisibilidade de 2 até à raiz quadrada do número
for (int i = 2; i <= sqrt(number); i++) {
if (number % i == 0) {
return 0; // Não é primo se for divisível
}
}
return 1; // Primo se nenhum divisor for encontrado
}
void print_prime_details(int number) {
if (is_prime(number)) {
printf("%d é um NÚMERO PRIMO!\n", number);
printf("Explicação:\n");
printf("- É divisível apenas por 1 e por si próprio\n");
printf("- Nenhum outro divisor foi encontrado entre 2 e √%d\n", number);
} else {
printf("%d NÃO é um número primo.\n", number);
// Encontrar e imprimir o menor divisor
for (int i = 2; i <= sqrt(number); i++) {
if (number % i == 0) {
printf("Explicação:\n");
printf("- Divisível por %d\n", i);
printf("- %d × %d = %d\n", i, number / i, number);
break;
}
}
}
}
int main() {
int number, continue_check;
do {
printf("Introduza um inteiro positivo para verificar se é primo: ");
scanf("%d", &number);
print_prime_details(number);
printf("\nDeseja verificar outro número? (1=Sim, 0=Não): ");
scanf("%d", &continue_check);
} while (continue_check == 1);
printf("Obrigado por utilizar o Verificador de Números Primos!\n");
return 0;
}
Compile o programa:
gcc ~/project/prime_checker.c -o ~/project/prime_checker -lm
Exemplos de saídas:
Introduza um inteiro positivo para verificar se é primo: 17
17 é um NÚMERO PRIMO!
Explicação:
- É divisível apenas por 1 e por si próprio
- Nenhum outro divisor foi encontrado entre 2 e √17
Deseja verificar outro número? (1=Sim, 0=Não): 1
Introduza um inteiro positivo para verificar se é primo: 20
20 NÃO é um número primo.
Explicação:
- Divisível por 2
- 2 × 10 = 20
Deseja verificar outro número? (1=Sim, 0=Não): 0
Obrigado por utilizar o Verificador de Números Primos!
Melhorias chave:
- Adicionadas explicações detalhadas para números primos e não primos
- Implementado um ciclo para permitir verificações múltiplas de números
- Fornece uma saída mais educativa sobre as propriedades dos números
Resumo
Neste laboratório, aprendemos como ler um inteiro inserido pelo utilizador em programação C, que é o primeiro passo na criação de um verificador de números primos. Em seguida, implementamos o algoritmo de verificação de números primos testando a divisibilidade de 2 até à raiz quadrada do número de entrada. O programa verifica se um número dado é primo, iterando pelos números de 2 até à raiz quadrada do número e verificando se algum deles divide o número uniformemente. Se nenhum divisor for encontrado, o número é considerado primo.



