finfantasy escribió:Si os fijais, yo ya os di una pista bastante clara, para comprobar el 23 llegabas hasta el 4, para comprobar el 25, llegabas hasta el 5, para el 35 llegariamos hasta el 5 también, para el 36 ya no, llegaríamos hasta el 6...
Me puse ha reescribir el programa sin leer mas comentarios que no quiero ver la solución xD. A VER si ahora está bien .
Pos lo que hice era que los numero impares por debajo de 10 (3,5,7) que son primos sean los divisores pero me he dado cuenta de que así dejo otros números que no son primos como que si lo son como por ejemplo el 121 que es 11 * 11. Ya se me ha ocurrido como hay que hacerlo de verdad para reducir a la mitad su velocidad. Mas tarde lo posteo
EDITO: bueno creo que ahora si que si xD ahora si que he reducido a la mitad los numeros que revisa el programa .
int main(int argc, char* argv[]) { int num, n = 3;
printf("Te voi a decir si un numero es primo o no.\n"); printf("Introduce un numero entero: "); scanf("%d", &num);
if (num < 2) printf("\nEl numero no es valido."); else if (num == 2) printf("\nEl numero es primo."); else if (num % 2 == 0) printf("\nEl numero no es primo. Es divisible por 2."); else { while (num % n != 0) n = n + 2;
if (num == n) printf("El numero es primo."); else printf("El numero no es primo. Es divisible por %d.", n); }
Que por fin alguien se dio cuenta (aparte de un par que ya saben) de que si un número es par, no puede ser primo (mira que era difícil, eh ) Enhorabuena, has superado la primera parte del reto.
Pero aún se puede reducir más aún. ¡A ver si eres capaz!
int main(int argc, char* argv[]) { int num, n = 3;
printf("Te voi a decir si un numero es primo o no.\n"); printf("Introduce un numero entero: "); scanf("%d", &num);
if (num < 2) printf("\nEl numero no es valido."); else if (num == 2) printf("\nEl numero es primo."); else if (num % 2 == 0) printf("\nEl numero no es primo. Es divisible por 2."); else if (num == 5) printf("\nEl numero es primo."); else if (num % 5 == 0) printf("\nEl numero no es primo. Es divisible por 5."); else { while (num % n != 0) n = n + 2;
if (num == n) printf("El numero es primo."); else printf("El numero no es primo. Es divisible por %d.", n); }
return 0; }
Si me dices que se puede más me retiro xD
EDITO: he editado el código eliminando lo que menciona moskito en el comentario siguiente
EDITO2: modificado el código ya que con num = 5 decía que no era primo
Última edición por dRoLl3R el 11 Mar 2010, 08:38, editado 2 veces en total.