Primo o no ¡SIN CICLOS! en C++

Me preguntaban en los comentarios de este post: Primo o no, que si habría alguna forma de hacer ese mismo programa pero sin ciclos. Mmmm…

Pues mi primera respuesta es no. Pero hay una forma muy burda de aproximarse a él. El siguiente programa es para calcular si un número es primo o no sin ciclos y es infalible hasta el 168, a partir de ahí puede que le atine o puede que no.

#include
using namespace std;

int main()
{
    int n;
    cout <> n;
    if(n!=2 & n%2==0)
        cout << "No es primo";
    else
    {
        if(n!=3 & n%3==0)
            cout << "No es primo";
        else
        {
            if(n!=5 & n%5==0)
                cout << "No es primo";
            else
            {
                if(n!=7 & n%7==0)
                    cout << "No es primo";
                else
                {
                    if(n!=11 & n%11==0)
                        cout << "No es primo";
                    else
                    {
                        cout << "Es primo";
                    }
                }
            }
        }
    }
}
  • Como vemos, primeramente checa si n es igual a 2; si no, checa si el residuo de n/2 es cero. Si si, no es primo; si no, sigue.
  • Luego checa si n es igual a 3; si no, checa si el residuo de n/3 es cero. Si si, no es primo; si no, sigue.
  • Lo mismo con el 5, el 7 y el 11.

Con eso obtenemos un buen número de números en los que estamos seguros que no fallaremos. Si agregamos el 13, agrandamos esa cantidad; y aún mas con el 17, el 19, … como en esta versión optimizada, que tiene su primer error con el 1681 (que no es primo)

#include
using namespace std;

int main()
{
    int n;
    cout <> n;
    if((n!=2 & n%2==0)||(n!=3 & n%3==0)||(n!=5 & n%5==0)||(n!=7 & n%7==0)||
       (n!=11 & n%11==0)||(n!=13 & n%13==0)||(n!=17 & n%17==0)||(n!=19 & n%19==0)||
       (n!=23 & n%23==0)||(n!=29 & n%29==0)||(n!=31 & n%31==0)||(n!=37 & n%37==0))
        cout << "No es primo";
    else
        cout << "Es primo";
}

Pero pues de eso no se trata, los ciclos son para evitar las cantidades interminables de ifs, así que usémoslos.

Ah y recuerden que si corren un programa y su compilador no se pausa solo, tienen que agregar cin.get();cin.get(); al final del programa, antes de la llave de cierre del main.

Si llegaste aquí buscando un programa para saber si un número es primo o no, sigue el link que está al principio del post.

5 thoughts on “Primo o no ¡SIN CICLOS! en C++

  1. hola y se podria sin for ni while de manera recursiva que introduscas un caso base y de alli en adelante la funcion haga el resto

  2. Hola buenas tardes, primero que nada gracias por tus explicaciones, muy claras y faciles de entender.

    Necesito tu ayuda con lo siguiente, tengo este codigo, pero cuando introduzco 9 10 o cualquier numero mayor no pasa de devolverme Notable y no Sobresaliente o Matricula de Honor como deberia de ser. A ver si me ayudas a identificar en que estoy fallando.

    Saludos

    // Calificaciones.cpp: define el punto de entrada de la aplicación de consola.
    //

    #include “stdafx.h”
    #include
    using namespace std;
    #include

    float _tmain(float argc, _TCHAR* argv[])
    {
    float nota=0;

    cout <> nota;
    if (nota<5)
    cout << "Suspenso"<<endl;

    else
    {
    if (nota=5 && nota<=6.9)
    cout << "Aprobado"<<endl;

    else
    {
    if (nota=7 && nota<=8.9)
    cout << "Notable"<<endl;

    else
    {
    if (nota=9 & nota<=9.9)
    cout << "Sobresaliente"<<endl;
    else
    {
    if (nota==10.8)
    cout << "Matricula de Honor"<<endl;

    else
    {
    cout << "No se ha encontrado un calificativo para la nota ingresada!"<<endl;

    }

    }
    }
    }
    }
    system ("pause");
    return 0;

    }

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s