Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] numeros primos codigo c++

Estas en el tema de numeros primos codigo c++ en el foro de C/C++ en Foros del Web. Hola, hace algun tiempo he tratado de hacer un programa que al ingresar un numero diga si es primo o no, ya he hecho el ...
  #1 (permalink)  
Antiguo 27/12/2013, 11:00
 
Fecha de Ingreso: diciembre-2013
Mensajes: 23
Antigüedad: 10 años, 4 meses
Puntos: 3
Pregunta numeros primos codigo c++

Hola, hace algun tiempo he tratado de hacer un programa que al ingresar un numero diga si es primo o no, ya he hecho el algoritmo que lo hace pero tiene un defecto, ya les explico primero miren el codigo:

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4.  
  5. {
  6.  
  7. int a,b=2,c=3,d=5,e=7;
  8. cout<<"introduce un numero: ";
  9. cin>>a;
  10. b=0;
  11. while(b==0 && a==2 || a==3 || a==5 || a==7){
  12. cout<<"Es primo";
  13. b++;
  14. break;
  15. }
  16. if(a%2!=0 && a%3!=0 && a%5!=0 && a%7!=0){
  17. cout<<"Es numero primo";
  18. }
  19. else{
  20.  cout<<"no es primo";
  21. }
  22. }

Como ven lo que hago es que si se divide el numero ingresado y usa modulo(%) entre el 2,3,5,7 los numero primos principales si el resultado es diferente de 0 entonces es primo si es cero entonces no es primo.
Bueno lo he probado y funciona, lo he provado hasta el 100 y pues.. ha funcionado, el unico problema es que, si el numero ingresado es 2,3,5,7 los registrara como que no son primos porque seria asi 2%2=0 y asi con el 3,5 y 7 por eso hice esta linea:

Código C++:
Ver original
  1. while(b==0 && a==2 || a==3 || a==5 || a==7)

pero lo que pasa esque al ingresar un valor antes mencionado se ejecuta tambien el if entonces no se como hacer que solo se ejecute el while para ese caso espero me haya dado a entender.

por cierto se que hay formas mas faciles, tambien he encontrado otros codigos por internet pero quiero hacerlo por mi propia creatividad sin embargo pues me he quedado trabado en eso, les pido que si deben modificar el codigo pueda ser con la misma logica que el original aun si es una estructura un tanto diferente.

Me he basado en esto
Para saber si un número es primo, lo vamos dividiendo por 2, 3, 5... hasta que encontremos una división exacta, en cuyo caso el número sería compuesto, o bien hasta que el cociente de la división sea menor que el divisor. Si hemos llegado a este punto sin encontrar ninguna división exacta, el número dado es primo.
Ejemplos: El numero 49: Dividimos por 2 y no es exacta. Dividimos por 3 y tampoco. Por 5 tampoco. Por 7 sí es exacta, luego el número 49 no es primo, es divisible por 7.
El numero 53: Dividimos por 2 y no es exacta, Por 3 tampoco, ni por 5 ni por 7. Dividimos entre 11 y tampoco es exacta, pero hemos llegado a que el cociente, 4, es menor que el divisor, 11, por lo que el número 53 es primo.

[URL="http://nosolomates.es/ayuda/ayuda/primos.htm"]http://nosolomates.es/ayuda/ayuda/primos.htm[/URL]

Gracias.
  #2 (permalink)  
Antiguo 28/12/2013, 02:21
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: numeros primos codigo c++

Como sabrás, un número es primo si solamente es divisible por sí mismo y por la unidad, pero no se toma en cuenta el 1, por lo que los números primos empiezan desde el 2, además, un número primo no tendría que tener más de 2 divisores, o dicho de otra forma, no puede ser divisible entre más de dos números.

Sabiendo esto, puedes hacer lo siguiente:
Código C++:
Ver original
  1. int numero, i, divisores = 0;
  2.  
  3. cout << "Ingrese un numero: "; cin >> numero;
  4.  
  5. if (numero < 2) {
  6.      do {
  7.           clrscr();
  8.           cout << "Ingrese un numero: "; cin >> numero;
  9.      } while (numero < 2);
  10. }
  11.  
  12. for (i = 1; i <= numero; i++)
  13.      if (numero % i == 0)
  14.           divisores++;
  15.  
  16. cout << "El numero ingresado " << (divisores > 2 ? "no es primo" : "es primo");

Declaro tres variables: el número a ingresar, un contador para el bucle que usaré y un acumulador para los divisores del número. Luego de ingresar el número, verifico que sea mayor o igual a 2, de no serlo, limpio la pantalla y le pido al usuario que vuelva a ingresar el número, esto se repetirá en un bucle mientras el número sea menor a 2.

Ya con el número válido, utilizo un bucle que irá desde el 1 (el primer divisor), hasta el número ingresado. En cada iteración, obtengo el residuo de la división entre el número ingresado y el valor actual del contador del bucle, si dicho valor es igual a cero, es decir, si el número ingresado es divisible por el valor del contador en dicha iteración, aumento en 1 el valor del acumulador divisiores.

Finalmente, si obtuve más de dos divisores, quiere decir que el número no es primo, caso contrario, lo es. En cualquiera de los casos, se imprime el respectivo mensaje.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 28/12/2013, 08:47
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: numeros primos codigo c++

Eh arreglado para que ande con tu código.
Pero hay maneras mas efectivas de hacerlo como lo comenta alexis88.
Código C++:
Ver original
  1. #include <iostream>
  2.     using namespace std;
  3.     #define saltar cout<<endl;  
  4.    
  5.         int main(){    
  6.             int a,b=2,c=3,d=5,e=7;
  7.             bool repetir, eleccion;
  8.             repetir = eleccion = true;
  9.            
  10.             do{
  11.            
  12.                 cout<<"introduce un numero: ";
  13.                 cin>>a;
  14.                 b=0;
  15.        
  16.                 if(b==0 && a==2 || a==3 || a==5 || a==7){
  17.                     cout<<"Es primo";
  18.                     saltar;
  19.                     b++;
  20.            
  21.                 }else if(a%2!=0 && a%3!=0 && a%5!=0 && a%7!=0){//otro if
  22.                     cout<<"Es numero primo";
  23.                     saltar;
  24.                 }else{
  25.                     cout<<"no es primo";
  26.                     saltar;
  27.                 }
  28.                
  29.                
  30.                 cout << "deseas ver otro numero?" << endl;
  31.                 cout << "1- ok" << endl;           
  32.                 cout << "2- salir" << endl;
  33.                 cin >> eleccion;
  34.                 if (eleccion == 2)
  35.                     repetir = false;               
  36.             }while( repetir );
  37.         }

tu código funciona pero necesitaba algunas modificaciones.
Toma los ejemplos que ves aqui e intenta mejorarlo ;)
No desanime sigue así
  #4 (permalink)  
Antiguo 28/12/2013, 10:03
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 12 años, 4 meses
Puntos: 46
Respuesta: numeros primos codigo c++

Un numero puede no ser divisible entre 2,3,5,7 y no ser primo. Véase el 649 = 11*59.
  #5 (permalink)  
Antiguo 28/12/2013, 11:20
 
Fecha de Ingreso: diciembre-2013
Mensajes: 23
Antigüedad: 10 años, 4 meses
Puntos: 3
Respuesta: numeros primos codigo c++

Cita:
Iniciado por L3m0n Ver Mensaje
Un numero puede no ser divisible entre 2,3,5,7 y no ser primo. Véase el 649 = 11*59.
mm... bueno... al menos funciona con los numeros menores no? los niños aprenden a pasitos y aprenden bien, de poco en poco se gana experiencia

Muchas gracias a los dos :D.
  #6 (permalink)  
Antiguo 28/12/2013, 11:33
 
Fecha de Ingreso: diciembre-2013
Mensajes: 23
Antigüedad: 10 años, 4 meses
Puntos: 3
Respuesta: numeros primos codigo c++

muchas gracias, muy buena tu explicacion!!

Etiquetas: c++
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:14.