Comprobar si un Número es Primo en C

CBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderemos a comprobar si un número es primo en programación C. El laboratorio consta de tres pasos: leer un entero de entrada del usuario, probar la divisibilidad del 2 hasta la raíz cuadrada del número, e imprimir si el número es primo o no. Al final de este laboratorio, tendrás un programa funcional que puede determinar la primalidad de un entero dado.

El laboratorio comienza enseñando cómo leer una entrada de entero del usuario utilizando la función scanf(). Luego, introduce el algoritmo de comprobación de números primos, que implica probar la divisibilidad desde el 2 hasta la raíz cuadrada del número de entrada. Si no se encuentran divisores, el número se considera primo. Finalmente, el programa imprime el resultado, indicando si el número es primo o no.

Leer un Entero

En este paso, aprenderemos a leer una entrada de entero del usuario en programación C. Este es el primer paso para crear un programa que verifique si un número es primo.

Primero, creemos un nuevo archivo C para nuestro programa de verificación de números primos:

cd ~/project
nano prime_checker.c

Ahora, escribamos el código para leer un entero:

#include <stdio.h>

int main() {
    int number;

    printf("Ingrese un entero positivo para comprobar si es primo: ");
    scanf("%d", &number);

    printf("Usted ingresó: %d\n", number);

    return 0;
}

Ejemplo de salida:

Ingrese un entero positivo para comprobar si es primo: 17
Usted ingresó: 17

Desglose del código:

  • #include <stdio.h> incluye la biblioteca de entrada/salida estándar.
  • int main() es la función principal donde comienza la ejecución del programa.
  • int number; declara una variable entera para almacenar la entrada del usuario.
  • printf() muestra un mensaje al usuario.
  • scanf() lee una entrada de entero del usuario y la almacena en number.
  • printf() confirma el número ingresado por el usuario.

Compila y ejecuta el programa:

gcc prime_checker.c -o prime_checker
./prime_checker

Probar la Divisibilidad de 2 a √n

En este paso, implementaremos el algoritmo de comprobación de números primos probando la divisibilidad desde 2 hasta la raíz cuadrada del número de entrada.

Modifiquemos nuestro programa C anterior para añadir la lógica de comprobación de números primos:

nano ~/project/prime_checker.c

Actualiza el código con la prueba de divisibilidad:

#include <stdio.h>
#include <math.h>

int is_prime(int number) {
    // Los números menores que 2 no son primos
    if (number < 2) {
        return 0;
    }

    // Comprobar la divisibilidad de 2 hasta la raíz cuadrada del número
    for (int i = 2; i <= sqrt(number); i++) {
        if (number % i == 0) {
            return 0; // No es primo si es divisible
        }
    }

    return 1; // Primo si no se encuentran divisores
}

int main() {
    int number;

    printf("Ingrese un entero positivo para comprobar si es primo: ");
    scanf("%d", &number);

    if (is_prime(number)) {
        printf("%d es un número primo.\n", number);
    } else {
        printf("%d no es un número primo.\n", number);
    }

    return 0;
}

Compila el programa con la biblioteca matemática:

gcc ~/project/prime_checker.c -o ~/project/prime_checker -lm

Ejemplos de salida:

Ingrese un entero positivo para comprobar si es primo: 17
17 es un número primo.

Ingrese un entero positivo para comprobar si es primo: 20
20 no es un número primo.

Puntos clave de la implementación:

  • La función sqrt() de <math.h> calcula la raíz cuadrada.
  • Solo comprobamos la divisibilidad hasta √n para optimizar el algoritmo.
  • Si no se encuentran divisores, el número es primo.
  • El operador módulo % comprueba la divisibilidad.
  • Devolvemos 0 para números no primos, 1 para números primos.

Imprimir si es Primo o no

En este paso final, mejoraremos nuestro programa de comprobación de números primos añadiendo una salida más detallada y permitiendo la comprobación de varios números.

Modifiquemos el programa para proporcionar una salida más completa:

nano ~/project/prime_checker.c

Actualiza el código con una interfaz mejorada:

#include <stdio.h>
#include <math.h>

int is_prime(int number) {
    // Los números menores que 2 no son primos
    if (number < 2) {
        return 0;
    }

    // Comprobar la divisibilidad de 2 hasta la raíz cuadrada del número
    for (int i = 2; i <= sqrt(number); i++) {
        if (number % i == 0) {
            return 0; // No es primo si es divisible
        }
    }

    return 1; // Primo si no se encuentran divisores
}

void print_prime_details(int number) {
    if (is_prime(number)) {
        printf("%d es un número PRIMO!\n", number);
        printf("Explicación:\n");
        printf("- Sólo es divisible por 1 y por sí mismo\n");
        printf("- No se encontraron otros divisores entre 2 y √%d\n", number);
    } else {
        printf("%d no es un número primo.\n", number);

        // Encontrar e imprimir el divisor más pequeño
        for (int i = 2; i <= sqrt(number); i++) {
            if (number % i == 0) {
                printf("Explicación:\n");
                printf("- Divisible por %d\n", i);
                printf("- %d × %d = %d\n", i, number / i, number);
                break;
            }
        }
    }
}

int main() {
    int number, continue_check;

    do {
        printf("Ingrese un entero positivo para comprobar si es primo: ");
        scanf("%d", &number);

        print_prime_details(number);

        printf("\n¿Desea comprobar otro número? (1=Sí, 0=No): ");
        scanf("%d", &continue_check);
    } while (continue_check == 1);

    printf("Gracias por usar el Comprobador de Números Primos!\n");

    return 0;
}

Compila el programa:

gcc ~/project/prime_checker.c -o ~/project/prime_checker -lm

Ejemplos de salida:

Ingrese un entero positivo para comprobar si es primo: 17
17 es un número PRIMO!
Explicación:
- Sólo es divisible por 1 y por sí mismo
- No se encontraron otros divisores entre 2 y √17

¿Desea comprobar otro número? (1=Sí, 0=No): 1

Ingrese un entero positivo para comprobar si es primo: 20
20 no es un número primo.
Explicación:
- Divisible por 2
- 2 × 10 = 20

¿Desea comprobar otro número? (1=Sí, 0=No): 0
Gracias por usar el Comprobador de Números Primos!

Mejoras clave:

  • Se añadieron explicaciones detalladas para números primos y no primos.
  • Se implementó un bucle para permitir comprobaciones de varios números.
  • Proporciona una salida más educativa sobre las propiedades de los números.

Resumen

En este laboratorio, aprendimos a leer una entrada de entero del usuario en programación C, que es el primer paso para crear un comprobador de números primos. Luego, implementamos el algoritmo de comprobación de números primos probando la divisibilidad desde 2 hasta la raíz cuadrada del número de entrada. El programa verifica si un número dado es primo iterando a través de los números del 2 hasta la raíz cuadrada del número y comprobando si alguno de ellos divide al número de forma exacta. Si no se encuentran divisores, el número se considera primo.