Comprobar si un Número es Perfecto en C

CBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderás a escribir un programa en C para comprobar si un número dado es perfecto. El programa leerá un entero del usuario, calculará la suma de sus divisores propios y determinará si el número es perfecto o no. El laboratorio cubre conceptos fundamentales de teoría de números y matemáticas discretas, proporcionando una aplicación práctica de estos principios en la programación en C.

El programa primero solicita al usuario que introduzca un entero positivo, luego calcula la suma de los divisores propios del número (es decir, todos los enteros positivos menores que el número que dividen al número exactamente). Finalmente, el programa compara la suma de los divisores propios con el número original e imprime el resultado, indicando si el número es perfecto o no.

Leer un Entero

En este paso, aprenderás a leer una entrada de entero en C para comprobar números perfectos. Crearemos un programa en C que permita a los usuarios introducir un número para analizar.

Primero, creemos un nuevo archivo C en el directorio del proyecto:

cd ~/project
nano perfect_number.c

Ahora, añade el siguiente código al archivo:

#include <stdio.h>

int main() {
    int number;

    // Solicitar al usuario que introduzca un entero positivo para comprobar si es un número perfecto:
    printf("Introduce un entero positivo para comprobar si es un número perfecto: ");
    scanf("%d", &number);

    // Imprimir el número introducido para verificar la entrada
    printf("Has introducido: %d\n", number);

    return 0;
}

Ejemplo de salida:

Introduce un entero positivo para comprobar si es un número perfecto: 28
Has introducido: 28

Desglose del código:

  • #include <stdio.h> incluye la biblioteca de entrada/salida estándar
  • scanf("%d", &number) lee una entrada de entero del usuario
  • printf() se utiliza para solicitar la entrada y mostrar el número introducido.

Compila y ejecuta el programa:

gcc perfect_number.c -o perfect_number
./perfect_number

Sumar Divisores Propios y Comparar con el Número

En este paso, modificarás el programa C anterior para calcular la suma de los divisores propios y determinar si el número es perfecto.

Abre el archivo existente y actualiza el código:

nano ~/project/perfect_number.c

Reemplaza el código anterior con:

#include <stdio.h>

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

    // Solicitar al usuario que introduzca un entero positivo para comprobar si es un número perfecto:
    printf("Introduce un entero positivo para comprobar si es un número perfecto: ");
    scanf("%d", &number);

    // Calcular la suma de los divisores propios
    for (int i = 1; i < number; i++) {
        if (number % i == 0) {
            sum += i;
        }
    }

    // Comprobar si el número es perfecto
    if (sum == number) {
        printf("%d es un número perfecto!\n", number);
    } else {
        printf("%d no es un número perfecto.\n", number);
    }

    return 0;
}

Compila y ejecuta el programa:

gcc perfect_number.c -o perfect_number
./perfect_number

Ejemplo de salida para un número perfecto:

Introduce un entero positivo para comprobar si es un número perfecto: 28
28 es un número perfecto!

Ejemplo de salida para un número no perfecto:

Introduce un entero positivo para comprobar si es un número perfecto: 12
12 no es un número perfecto.

Conceptos clave explicados:

  • El bucle for itera a través de los números del 1 al number - 1
  • number % i == 0 comprueba si i es un divisor del número
  • sum += i suma todos los divisores propios
  • Un número perfecto es un entero positivo igual a la suma de sus divisores propios

Imprimir el Resultado

En este paso final, mejorarás el programa para proporcionar una salida más detallada sobre el número perfecto, incluyendo sus divisores y la suma.

Abre el archivo y actualiza el código:

nano ~/project/perfect_number.c

Reemplaza el código anterior con:

#include <stdio.h>

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

    // Solicitar al usuario que introduzca un entero positivo para comprobar si es un número perfecto:
    printf("Introduce un entero positivo para comprobar si es un número perfecto: ");
    scanf("%d", &number);

    // Imprimir encabezado para los divisores
    printf("Divisores propios de %d: ", number);

    // Calcular la suma de los divisores propios e imprimirlos
    for (int i = 1; i < number; i++) {
        if (number % i == 0) {
            printf("%d ", i);
            sum += i;
        }
    }

    // Imprimir el resultado detallado
    printf("\n\nSuma de los divisores propios: %d", sum);

    // Comprobar e imprimir el estado del número perfecto
    if (sum == number) {
        printf("\n%d es un NÚMERO PERFECTO!\n", number);
    } else {
        printf("\n%d no es un número perfecto.\n", number);
    }

    return 0;
}

Compila y ejecuta el programa:

gcc perfect_number.c -o perfect_number
./perfect_number

Ejemplo de salida para un número perfecto (28):

Introduce un entero positivo para comprobar si es un número perfecto: 28
Divisores propios de 28: 1 2 4 7 14

Suma de los divisores propios: 28
28 es un NÚMERO PERFECTO!

Ejemplo de salida para un número no perfecto (12):

Introduce un entero positivo para comprobar si es un número perfecto: 12
Divisores propios de 12: 1 2 3 4 6

Suma de los divisores propios: 16
12 no es un número perfecto.

Mejoras clave:

  • Ahora imprime todos los divisores propios.
  • Muestra la suma de los divisores propios.
  • Proporciona una salida clara y formateada.
  • Mantiene la lógica central de la detección de números perfectos.

Resumen

En este laboratorio, aprenderás a leer una entrada de entero en C y determinar si un número es perfecto. Primero, crearás un programa en C que solicita al usuario que introduzca un entero positivo. Luego, calcularás la suma de los divisores propios del número y la compararás con el número original para comprobar si es un número perfecto. Finalmente, imprimirás el resultado en la consola.

Los puntos clave de aprendizaje de este laboratorio son: leer la entrada de un entero usando scanf(), calcular la suma de los divisores propios usando un bucle for y comparar la suma con el número original para determinar si es un número perfecto.