Mostrar si un número es primo con C++

Los números primos son todos aquellos números que solo tienen dos divisores, el 1 y él mismo; por ejemplo, el número 11 es primo ya que solo se puede dividir por 1 y por 11. Este programa escrito en C++ cuenta con las siguientes 4 características:

  1. Evalúa el número ingresado por el usuario.
  2. Nos muestra los divisores que tiene ese número.
  3. Nos muestra cuántos divisores tiene ese número.
  4. Nos muestra si un número es o no es primo.




using namespace std;

int main() {
    unsigned long cont = 0, numero, lim = 0;

    cout << "Ingrese el numero a comprobar: ";
    cin >> numero;
  
    cout << "\n";
    cout << "Numero ingresado:\t" << numero << "\n";
    cout << "Numero de divisores:\t";
    for(unsigned long div = 1; div <= numero; div++) {
        if(numero % div == 0) {
            cout << "{" << div << "} ";
            cont++;
            lim++;
            if(lim == 10) {
                cout << "\n\t\t\t";
                lim = 0;
            }
        }
    }
    cout << "Fin!!" << endl;
    
    if(cont == 2) {
        cout << "El numero si es primo:\ttiene " << cont << " divisores." << endl;
    } else {
        cout << "El numero no es primo:\ttiene " << cont << " divisores." << endl;
    }

    return 0;
}
Directiva #include y sentencia using:
#include <iostream>
using namespace std;

En este fragmento de código se hacen dos cosas fundamentales para cualquier programa en C++; la primera línea incluye la cabecera <iostream> usando la directiva del preprocesador #include para poder realizar las operaciones de entrada y salida de datos; la segunda incorpora el espacio de nombres std de la biblioteca estándar al ámbito actual evitando la necesidad de usar el prefijo std:: siempre; por ejemplo, con el objeto cout: std::cout.

Declaración de variables, solicitud e ingreso de datos:
unsigned long cont = 0, numero, lim = 0;

cout << "Ingrese el numero a comprobar: ";
cin >> numero;

El lenguaje de programación C++ no posee inferencia de tipos ni es un lenguaje dinámico, es un lenguaje de tipado estático y eso quiere decir que toda variable que usemos debemos declararla con anterioridad. En este fragmento de código declaramos 3 variables de tipo unsigned long, este tipo de variables solo almacenan números positivos; pero solo dos de ellas se inicializan..

Con el objeto cout se muestra un mensaje en donde se le solicita al usuario que ingrese un número mientras que con el objeto cin se espera hasta que el usuario ingrese el número y presione Enter para almacenar el número en la variable numero usando el operador de extracción «>>».

Salto de línea, mostrando divisores y más:
cout << "\n";
cout << "Numero ingresado:\t" << numero << "\n";
cout << "Numero de divisores:\t";

Este fragmento de código es el más sencillo de todo el programa, solo lo conforman 3 líneas; la primera solo produce un salto de línea con el carácter «\n» antes de mostrar la información, la segunda línea muestra un mensaje con el número ingresado por el usuario y la tercera línea solo muestra un mensaje con una cadena que dice: «Numero de divisores»; junto a él van los divisores que son extraídos y mostrados por el bucle for().

Bucle for(), evaluando el número:
for(unsigned long div = 1; div <= numero; div++) {
    if(numero % div == 0) {
        cout << "{" << div << "} ";
        cont++;
        lim++;
        if(lim == 10) {
            cout << "\n\t\t\t";
            lim = 0;
        }
    }
}
cout << "Fin!!" << endl;

El bucle for() se inicializa con un valor de 1 e incrementa su valor en 1 hasta que la variable div sea menor o igual que el valor de la variable numero. Al interior del bucle hay 2 sentencias if() pero la segunda es anidada, la primera verifica si numero módulo (%) div da como residuo 0 y de ser así, imprime el valor de div dentro de un juego de {} e irá incrementando el valor de cont y lim en 1; la segunda sentencia parte los divisores cuando llegan a 10 verificando que el valor de lim sea igual a 10 e imprime un salto de línea con el carácter de nueva línea «\n», 3 espacios tabulados con el carácter «\t» y luego reinicia el valor de lim a 0.

Al ejecutar el programa, este fragmento de código nos da el siguiente resultado:

Numero de divisores:    {1} {2} {5} {10} {19} {31} {38} {62} {95} {155} 
                        {190} {310} {589} {1178} {2945} {5890} Fin!!

Se puede observar que se imprimen 10 divisores y la lista se parte alineándose a la anterior, mientras que la palabra «Fin!!» se imprime gracias a la última línea de código. En la última línea de código aparece la sentencia endl que también genera un salto de línea al igual que el carácter «\n».

Última sentencia if(), el número es o no es primo.
if(cont == 2) {
    cout << "El numero si es primo:\ttiene " << cont << " divisores." << endl;
} else {
    cout << "El numero no es primo:\ttiene " << cont << " divisor(es)." << endl;
}

Llegamos a la parte decisiva; esta última sentencia es la que nos mostrará en pantalla si un número es o no es primo verificando que el valor de la variable cont sea igual a 2 e informando al usuario si el número es o no es primo y la cantidad de divisores encontrados en el bucle for() anterior.



Después de compilar y ejecutar el programa, el resultado es el siguiente:

[fixedtorres@linuxero]$ ./NumerosPrimos
Ingrese el numero a comprobar: 5890

Numero ingresado:       5890
Numero de divisores:    {1} {2} {5} {10} {19} {31} {38} {62} {95} {155} 
                        {190} {310} {589} {1178} {2945} {5890} Fin!!
El numero no es primo:	tiene 16 divisor(es).

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *