Verificar se um Número é Perfeito em C

CBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a escrever um programa em C para verificar se um número dado é perfeito. O programa lerá uma entrada inteira do usuário, calculará a soma de seus divisores próprios e, em seguida, determinará se o número é perfeito ou não. O laboratório abrange conceitos fundamentais em teoria dos números e matemática discreta, fornecendo uma aplicação prática desses princípios na programação em C.

O programa primeiro solicita ao usuário que digite um inteiro positivo, em seguida, calcula a soma dos divisores próprios do número (ou seja, todos os inteiros positivos menores que o número que dividem o número exatamente). Finalmente, o programa compara a soma dos divisores próprios ao número original e imprime o resultado, indicando se o número é perfeito ou não.

Ler um Inteiro

Neste passo, você aprenderá como ler uma entrada de inteiro em C para verificar números perfeitos. Criaremos um programa em C que permite aos usuários inserir um número a ser analisado.

Primeiro, crie um novo arquivo C no diretório do projeto:

cd ~/project
nano perfect_number.c

Agora, adicione o seguinte código ao arquivo:

#include <stdio.h>

int main() {
    int number;

    // Solicitar ao usuário a entrada
    printf("Digite um inteiro positivo para verificar se é um número perfeito: ");
    scanf("%d", &number);

    // Imprimir o número inserido para verificar a entrada
    printf("Você digitou: %d\n", number);

    return 0;
}

Exemplo de saída:

Digite um inteiro positivo para verificar se é um número perfeito: 28
Você digitou: 28

Vamos analisar o código:

  • #include <stdio.h> inclui a biblioteca de entrada/saída padrão
  • scanf("%d", &number) lê uma entrada de inteiro do usuário
  • printf() é usado para solicitar a entrada e exibir o número inserido.

Compile e execute o programa:

gcc perfect_number.c -o perfect_number
./perfect_number

Somar Divisores Próprios e Comparar com o Número

Neste passo, você modificará o programa C anterior para calcular a soma dos divisores próprios e determinar se o número é perfeito.

Abra o arquivo existente e atualize o código:

nano ~/project/perfect_number.c

Substitua o código anterior por:

#include <stdio.h>

int main() {
    int number, sum = 0;

    // Solicitar ao usuário a entrada
    printf("Digite um inteiro positivo para verificar se é um número perfeito: ");
    scanf("%d", &number);

    // Calcular a soma dos divisores próprios
    for (int i = 1; i < number; i++) {
        if (number % i == 0) {
            sum += i;
        }
    }

    // Verificar se o número é perfeito
    if (sum == number) {
        printf("%d é um número perfeito!\n", number);
    } else {
        printf("%d não é um número perfeito.\n", number);
    }

    return 0;
}

Compile e execute o programa:

gcc perfect_number.c -o perfect_number
./perfect_number

Exemplo de saída para um número perfeito:

Digite um inteiro positivo para verificar se é um número perfeito: 28
28 é um número perfeito!

Exemplo de saída para um número não perfeito:

Digite um inteiro positivo para verificar se é um número perfeito: 12
12 não é um número perfeito.

Conceitos-chave explicados:

  • O loop for itera pelos números de 1 a number - 1
  • number % i == 0 verifica se i é um divisor do número
  • sum += i adiciona todos os divisores próprios
  • Um número perfeito é um inteiro positivo igual à soma de seus divisores próprios

Imprimir Resultado

Neste passo final, você aprimorará o programa para fornecer uma saída mais detalhada sobre o número perfeito, incluindo seus divisores e a soma.

Abra o arquivo e atualize o código:

nano ~/project/perfect_number.c

Substitua o código anterior por:

#include <stdio.h>

int main() {
    int number, sum = 0;

    // Solicitar ao usuário a entrada
    printf("Digite um inteiro positivo para verificar se é um número perfeito: ");
    scanf("%d", &number);

    // Imprimir cabeçalho para os divisores
    printf("Divisores próprios de %d: ", number);

    // Calcular a soma dos divisores próprios e imprimi-los
    for (int i = 1; i < number; i++) {
        if (number % i == 0) {
            printf("%d ", i);
            sum += i;
        }
    }

    // Imprimir o resultado detalhado
    printf("\n\nSoma dos divisores próprios: %d", sum);

    // Verificar e imprimir o status do número perfeito
    if (sum == number) {
        printf("\n%d é um NÚMERO PERFEITO!\n", number);
    } else {
        printf("\n%d não é um número perfeito.\n", number);
    }

    return 0;
}

Compile e execute o programa:

gcc perfect_number.c -o perfect_number
./perfect_number

Exemplo de saída para um número perfeito (28):

Digite um inteiro positivo para verificar se é um número perfeito: 28
Divisores próprios de 28: 1 2 4 7 14

Soma dos divisores próprios: 28
28 é um NÚMERO PERFEITO!

Exemplo de saída para um número não perfeito (12):

Digite um inteiro positivo para verificar se é um número perfeito: 12
Divisores próprios de 12: 1 2 3 4 6

Soma dos divisores próprios: 16
12 não é um número perfeito.

Melhorias-chave:

  • Agora imprime todos os divisores próprios.
  • Mostra a soma dos divisores próprios.
  • Fornece uma saída formatada e clara.
  • Mantém a lógica central de detecção de números perfeitos.

Resumo

Neste laboratório, você aprenderá como ler uma entrada de inteiro em C e determinar se um número é perfeito. Primeiro, você criará um programa em C que solicitará ao usuário que digite um inteiro positivo. Em seguida, calculará a soma dos divisores próprios do número e a comparará com o número original para verificar se é um número perfeito. Finalmente, imprimirá o resultado no console.

Os pontos principais de aprendizado deste laboratório são: ler entrada de inteiro usando scanf(), calcular a soma dos divisores próprios usando um loop for e comparar a soma com o número original para determinar se é um número perfeito.