Autor
|
Tema: Calculo de números primos (Leído 12,718 veces)
|
jamatbar
Desconectado
Mensajes: 104
|
Me han dado el siguiente código de programa en c, es un programa que pide un numero por teclado e indica si el número es o no primo, comprobando todos los posibles divisores: #include <stdio.h> int main() { int valor; int i; printf("Introduzca un valor: "); for ( i = 2; i < valor; i++ ) if (0 == (valor % i)) printf(" %d no es primo\n", valor ); return 0; }
He probado el código y es un poco malo, si el número es primo directamente se sale del programa, y si el número no lo es, te lo repite por cada divisor que tenga, y me han pedido que haga que solo se imprima un mensaje indicando si el número es primo o no al final del bucle. Para esto, nos dicen que utilicemos una variable de control, cuando encuentre un divisor se active dicha variable. Y al final del bucle se mostrará el mensaje adecuado segun el valor de la variable de control. He pensado que se tendría que usar la variable de control flag, pero no sé como implementarla muy bien, ¿alguien podría aclararmelo?, yo lo he intentado poniendo esto: #include <stdio.h> int main() { int valor; int i; int flag; printf("Introduzca un valor: "); flag=0; for ( i = 2; i < valor; i++ ) if (0 == (valor % i)) {flag=1; printf(" %d no es primo\n", valor ); } else flag=0; printf(" %d es primo\n", valor ); return 0; }
Pero aun así, al probarlo me sigue dando error, ¿alguna solución? Saludos
|
|
|
En línea
|
|
|
|
DickGumshoe
|
No sé si te servirá, pero yo hice este programa hace tiempo (aunque en él no uso "for"): #include<stdio.h> #include<stdlib.h> int main(void) { int num; printf("\nIntroduce un numero"); if((num%2==0) && (num!=2)){ printf("El numero no es primo");} else{ if((num%3==0) && (num!=3)){ printf("El numero no es primo");} else{ if((num%5==0) && (num!=5)){ printf("El numero no es primo");} else{ if((num%7==0) && (num!=7)){ printf("El numero no es primo");} else{ if((num%11==0) && (num!=11)){ printf("El numero no es primo");} else{ }}}}} }
Saludos.
|
|
|
En línea
|
|
|
|
jamatbar
Desconectado
Mensajes: 104
|
Gracias por la ayuda, aunque me piden que use una variable de control (flag), por eso no puedo ponerlo como tu lo tienes.
Saludos!
|
|
|
En línea
|
|
|
|
$Edu$
Desconectado
Mensajes: 1.842
|
Ademas si usas el metodo de DickgumShoe y lo probarias con un numero muy grande tendrias que hacer miles de ifs mas xD para ahorrar esos ifs es que se usan los bucles DickgumShoe.
Y lo de la variable flag, le puedes llamar como quieras, solo sera una variable auxiliar pero veo que la declaras y le asignas valores pero nunca verificas el valor para hacer algo.. cosa que esta al pedo sino xD
|
|
|
En línea
|
|
|
|
jamatbar
Desconectado
Mensajes: 104
|
Ademas si usas el metodo de DickgumShoe y lo probarias con un numero muy grande tendrias que hacer miles de ifs mas xD para ahorrar esos ifs es que se usan los bucles DickgumShoe.
Y lo de la variable flag, le puedes llamar como quieras, solo sera una variable auxiliar pero veo que la declaras y le asignas valores pero nunca verificas el valor para hacer algo.. cosa que esta al pedo sino xD
EL problema es que no sé muy bien como usarla XD
|
|
|
En línea
|
|
|
|
$Edu$
Desconectado
Mensajes: 1.842
|
Yo siempre recomiendo leer tranquilo un buen manual del lenguaje de programacion que quieren aprender, aprenderlo bien de bien, usar bucles bien de bien, saber muchas cosas y luego ahi si te vendra a la mente muchas posibles soluciones
|
|
|
En línea
|
|
|
|
тαптяα
Desconectado
Mensajes: 1.151
Sic utere tuo ut alienum non laeda
|
Aquí por si lo quereis primos, os dejo el codigo locos que escribe los primeros numeros primos, echadle un ojo. #include <stdio.h> #include <stdlib.h> #define N 999 //Primo a pillar speed jajaja int main () { int i, j, primo; primo = 1; for (i = 2; i < N; i++) { for ( j = 2; j <= i/2; j++) if ((i%j) == 0) primo = 0; if(primo) printf("%d\n", i); primo = 1; } return 0; }
|
|
|
En línea
|
|
|
|
$Edu$
Desconectado
Mensajes: 1.842
|
Ahi tenes tu variable flag jamatbar, es la que el uso como "primo" que tambien podes declararla como booleana para que le asignes True or False
|
|
|
En línea
|
|
|
|
CobraCY
Desconectado
Mensajes: 9
|
Bueno soy nuevo y se me dio echarle una mano. Puedes hacerlo con un while o con un for, para el caso recomiendo el for, también puedes usar un flag int o bool, me gusta más el bool, pero bueno te dejo un ejemplo con el bool y otro con el int y también. #include <iostream> using namespace std; int main() { int n; cin >> n; int flag=0; for(int i=2; i < n && flag==0;i++) { if(n%i==0) flag++; } if(flag==0 || n==1 || n==2) cout << "Es primo" << endl; else cout << "No es primo" << endl; return 0; }
Este usa el flag en Int Ahora uno que usa el Flag en bool #include <iostream> using namespace std; int main() { int n; cin >> n; bool flag=true; for(int i=2; i < n && flag;i++) { if(n%i==0) flag=false; } if(flag || n==1 || n==2) cout << "Es primo" << endl; else cout << "No es primo" << endl; return 0; }
Este usa el flag en Bool, como ves solo cambian, mmm en realidad no cambia nada xD. Saludos.
|
|
« Última modificación: 12 Noviembre 2011, 16:12 pm por CobraCY »
|
En línea
|
|
|
|
jamatbar
Desconectado
Mensajes: 104
|
Vale, leyendo más o menos lo que habeís puesto he hecho lo siguiente: #include <stdio.h> int main() { int valor; int i; int flag; printf("Introduzca un valor: "); for ( i = 2; i < valor; i++ ) if (0 == (valor % i)) flag=0; if (flag) printf("%d es primo\n",valor ); flag=1; return 0; }
Si meto un número primo me dice que es primo (sólo con una sentencia),¿que puedo hacer para poner una función si el numero que meto es no primo? Además, me he dado cuenta de que si meto un 1,2 o 3 el programa sale directamente, ¿por qué? Saludos
|
|
« Última modificación: 12 Noviembre 2011, 17:17 pm por jamatbar »
|
En línea
|
|
|
|
|
|