• Blog
  • Acerca
  • Autor
  • Contacto
  • Saber si un número es primo o no

    Anteriormente vimos como imprimir los números primos en un rango determinado por el usuario, ahora la idea es pedirle al usuario un número y decirle si es primo o no es primo.

    #include<iostream>
    using namespace std;
     
    int main()
    {
      int num,c,res,nc=0;
      cout<<"Introduce un número: "; cin>>num;
      for(c=1;c<=num;c++)
      {
        res=num%c;
        if(res==0)
          nc++;
        if(nc>2)
          break;
      }
      if(nc==2)
        cout<<"Es primo";
      else
        cout<<"No es primo";
      cin.get();cin.get();
    }

    En sí, es lo mismo que el anterior. Para darle mas presentación podemos hacer que no se salga a la primera, sino hasta que se introduzca, por ejemplo, un cero. Esto se hace con un ciclo do while.

    #include<iostream>
    using namespace std;
     
    int main()
    {
      int num=1,c,res,nc=0,rep=0;
      while(num!=0)
      {
        cout<<"Introduce un número: ";
        if(rep==1)
        {
          cout<<" --> Para salir oprime cero: ";
        }
        rep++;
        cin>>num;
        for(c=1;c<=num;c++)
        {
          res=num%c;
          if(res==0)
            nc++;
        }
        if(nc==2)
          cout<<"Es primo\n\n";
        else
          cout<<"No es primo\n\n";
        nc=0;
      }
    }

    ¿Alguien sabe porqué la variable num empieza en 1 en este caso?

    1. Jesus dice:

      Muchas gracias por tu gran trabajo, quisiera saber si tambien podrías hacer dar un ejemplo para saber si un numero es primo o no pero “sin cliclos”; osea sin for y sin while solo if y else.
      Te agredecería mucho tu ayuda.

      • THEbatzuk dice:

        Sin ciclos lo veo difícil. Para saber si un número es primo necesitamos checar si es divisible entre los números menores a él, si resulta que solo se divide entre 1 y él mismo, entonces es primo.

        Pero nada es imposible, también puedes checar solo con ifs si es divisible entre 2, luego entre 3, entre 5, 7 y 11, si en alguno de ellos el residuo es 0, no es primo, solo teniendo cuidado de no hacer la división cuando sea el mismo numero (5 y 5 por ejemplo). Pero no hay seguridad que funcione con números grandes.

        ¿Un poco confuso ese párrafo no? Mejor te contesto con un post, espéralo :)

        • Jesus dice:

          De nuevo te doy las gracias por toda tu ayuda.

        • Carlos Fort dice:

          Realmente, sería mucho más eficiente comprobar, una vez has comprobado que no es un número divisible entre 2, comprobarlo sólo si es divisible entre los números impares. Además, yo tengo hecho un programa que hace precisamente eso, y la comprobación la hago en una función que sale de ella en el momento en que ha comprobado que tiene algún divisor. Mi algoritmo también comprueba antes del ciclo si es divisible entre 3, y en el ciclo se salta los múltiplos de 3 (esto lo hice porque es parte de un programa para calcular todos los números primos del 2 al número que le indiques, y yo lo he probado hasta 50000000, para 10000000 tarda 9 segundos en mi ordenador).

        • Carlos Fort dice:

          Otro detalle, en mi algoritmo calculo la raiz cuadrada por exceso del número a comprobar, y la pongo como límite de comprobación (si no tiene ningún divisor menor o igual a su raiz cuadrada, tampoco tiene ningún divisor superior a ella).

    2. jeraldin dice:

      gracias por desir como es un numero primo por fin podre pasa la materi

    3. AdP dice:

      ¿Por qué usas la variable “num” como límite superior del bucle? Sería suficiente con alcanzar la parte entera de “sqrt(num)”.

    4. Luis Enrique dice:

      Si hola seria bueno que alguien publicara un codigo que pasandole una cierta cantidad de cifras me mostrara un primo correspondiente, es decir entrando por ejemplo 3 me muetre “997″.

    5. Daniel dice:

      Hola! Me gustaría saber
      la variable nc qué es???

    6. Carlos dice:

      ese algoritmo funciona pero es extremadamente ineficiente, además no tiene en cuenta el hecho de que no es necesario iterar entre 1 y num, una mejor alternativa seria iterar entre 1 y la raiz cuadrada de num

      • THEbatzuk dice:

        Estoy de acuerdo que no es la mejor forma de hacerlo, pero de ahí a que sea ‘extremadamente ineficiente’ hay un salto muy grande. Además de que el público para el que está diseñado este blog son personas ‘no muy expertas’ en programación que busca ayuda para hacer sus tareas.

    7. Ronny dice:

      Muy buen post…
      Pero, que es nc? seria bueno que hubieran comientarios describiendo cada linea de codigo par la orientacion los visitantes de la web… GRACIAS.

    8. Meli dice:

      OMG, Excelente el código

    9. Hector dice:

      Muy buena la web! Quería aportar un granito de arena optimizando este código un poquito.

      La mejora sería luego de la siguiente línea
      res=num%c;
      y simplemente agregar
      if(nc>2)
      break;

      de estar forma evitamos seguir contando al vicio.

      Simplemente eso.
      Saludos

    10. Meli dice:

      Alguien puede ayudarme en una tarea? mi correo es melissasantacruz@hotmail.com ^^ es importante u.u

    11. manuel dice:

      ola quisiera saber como sacar si un numero es primo desde una matriz de un salto especifico.

    12. Claudia dice:

      hola soy nueva en esto y quería saber si me podrían ayudar con un programa q no me sale

    13. jorge dice:

      hola como se puede poner el en mismo programa que muestre los primos en un rango y q diga si el numero que ingresaste es primo?

    14. Ricardo dice:

      Hola, una pregunta…. Hice un programa en C que me da 10 numeros aleatorios, como puedo aplicar esta “ley de primos” para determina cuantos primos hay entre esos numeros aleatorios ?? :S

      Saludos ,.., y muy bueno el blog :P

    15. MUY facil num || numero empieza en cero para que pueda entrar a en ciclo while ya que While si la condicion es falsa se termina hay mismo y no deja entrar :D y como 1 no es igual a 0 dentra, pero si quisiera dar solo una pasada usaría un DO WHILE ya que el DO WHILE deja por lo menos hacer un recorrido y al final lee la condición de que ingreses un numero distinto a cero :D xau

    16. etyiñ+orq dice:

      ustedes no saben explicar pero listo

    17. rich dice:

      podrias explicar o.O

    18. andre dice:

      disculpa para que es la c

    19. Sergio dice:

      necesito la ayuda para encontrar los primero N numero perfectos

    20. tania dice:

      alguien me podria decir como hacer un programa que me muestre numeros impares del 3 al 49 con el ciclo while xfavor!!!

    21. steve ch dice:

      un programa para un rango de numeros limite inferior y superior y multiplo del rango e imprima los primos
      se los voy a agradecer

    22. Marcos Roca dice:

      GRACIAS ESTA BIEN ESPLICADO SOBRE COMO CALCULAR UN NUMERO PRIMO NO TENIA LA IDEA COMO PROGRAMARLO GRACIAS

    23. Ahiaz dice:

      Hola amigo vi tu post y me gusto eres excelente explicando pero tengo una consulta en como sacar primos le puedes echar un vistazo a mi programa!!!

      include
      #include

      using namespace std;

      int main()
      {
      int numero;
      int sumatotal = 0;
      double promedio;
      int mayor = 1;

      int contador = 0;
      int contador2;
      int contador3 = 0;
      int nc = 0;
      int arregloprimo [contador3];

      cout <> numero;

      // Se utiliza las estructuras if para calcular el numero mayor y el numero menor ingresado!!
      int menor = numero;

      if (numero >= mayor)
      mayor = numero;

      if (numero <= menor && numero !=0)
      menor = numero;

      while (numero != 0) {//inicio while

      sumatotal = sumatotal + numero; //acumulador

      cout <> numero;

      //Se vuelven a escribir exactanente las mismas estructuras if para evitar errores al introducir el primer numero

      if (numero >= mayor)
      mayor = numero;

      if (numero <= menor && numero !=0)
      menor = numero;

      contador++;
      //este procedimiento que sigue es para sacar los numeros primos que digita el usuario (EN LO QUE TENGO LA DUDA) pero me tira un error a la hora de tratar de almacenarlos en el arreglo , lo que quiero es almacenarlos y mostrar al final cuando el usuario digita 0 los numeros almacenados en el arreglo!!!

      for (contador2 = 1; contador2 <= numero; contador2++){// inicia for

      int calculoprimo = numero%contador2;
      if (calculoprimo == 0)
      nc++;
      }// fin de for
      if (nc <= 2 ) { //inicia if

      numero = arregloprimo[contador3] << endl;
      contador3 ++;} // finaliza if (aquí termina el procedimiento para sacar los primos pero me falla me ayudan a corregirlo para que funciones el resto esta bien!!!)

      }// fin de while

      // si el contador no es igual 0 se muestran los datos de lo contrario el usuario digito 0 en el primer numero

      if (contador != 0){ //inicia if
      cout << sumatotal << endl; // biennnn da bieeeen
      cout << mayor << endl;
      cout << menor <<endl;
      promedio = static_cast (sumatotal) / contador;
      cout << setprecision(2) << fixed << promedio;
      cout << “aqui va el arreglo mostrando los numeros primos almacenados” //lo que no puedo hacer ayuda plis
      } //fin de if

      else

      cout << "No se introdujeron datos!!!\n";

      return 0;

      } //fin de main.

    24. Ahiaz dice:

      NO SALIO PERO ES INCLUDE IOSTREAM Y INCLUDE IOMANIP

    25. alejandra dice:

      Hola, necesito realizar un algoritmo que me imprima los números primos del 1 al 100. Gracias!!

      • Juan A dice:

        #include
        using namespace std;

        int main()
        {
        int n=100,c=0,c2=0,res=0,nc=0;

        for(c=1;c<=n;c++)
        {
        for(c2=1;c2<=c;c2++)
        {
        res=c%c2;
        if(res==0)
        {
        nc=nc+1;
        }
        }
        if(nc==2)
        {
        cout<<"\n"<<c;
        }
        nc=0;
        }
        }

    26. Juan A dice:

      Esta es la respuesta para los numeros primos del 1 al 100.

      #include
      using namespace std;

      int main()
      {
      int n=100,c=0,c2=0,res=0,nc=0;

      for(c=1;c<=n;c++)
      {
      for(c2=1;c2<=c;c2++)
      {
      res=c%c2;
      if(res==0)
      {
      nc=nc+1;
      }
      }
      if(nc==2)
      {
      cout<<"\n"<<c;
      }
      nc=0;
      }
      }

    27. manuela. dice:

      hola necesito este ejecicio. utilizando funciones y procedimientos realice un algoritmo que diga si un numero es primo o no

    28. valentina dice:

      hola todos una consulta alguien sabe como hacer para obtener los números no primos en lenguaje C (c++) porfa se los agradezco mucho si me dan una respuesta gracias….

    29. katalina dice:

      ola nesesito q me ayude con una tarea de algoritmos x favor esplicarme es q no entiendo nada de eso

    30. GutiX dice:

      La variable res es prescindible.

      Podemos ahorrarnos-la si en vez de “if(res==0)” directamente ponemos if(num%c==0).

      Por cierto el algoritmo está muy bien pensado! Gracias y felicidades por tan buen código.

    31. GutiX dice:

      Ah! En el segundo caso, la variable num empieza en uno, porque de lo contrario no entraría en el bucle while, ya que 1!=0.

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

    2. [...] un programa que cuente la cantidad de números primos que hay en un rango, no se ha conformado con saber si un número es primo o no o con saber cómo mostrar los números primos en un rango, así que le vamos a ayudar con la única [...]

    3. [...] para entender cómo obtuvimos los números primos, deberían darle una revisada a estos posts: Saber si es primo o no y Primos en un [...]

    Hola, escribe aquí tu comentario: