Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: luiggy2 en 10 Marzo 2009, 16:54 pm



Título: Calcular si un nº dado es primo
Publicado por: luiggy2 en 10 Marzo 2009, 16:54 pm
Mi duda es la siguiente:

¿Alguien sabe como hacer para calcular si un nº dado es primo sin necesidad de haberlos almacenado anteriormente?

He estado pensando y lo único que se me ocurre es:
1º) Divide entre 2, si resto != 0;
2º) Divide entre 3, si resto != 0;
3º) Divide entre 5, si resto != 0;
...
...


El problema es que para hacer esto, he tenido que almacenar los primos anteriormente y eso es lo que no quiero.



Saludos!
Espero sus respuestas


Título: Re: Calcular si un nº dado es primo
Publicado por: Novlucker en 10 Marzo 2009, 17:04 pm
La lógica del programa?
Para que almacenar los números?

Partiendo de un número N lo divides por todos los números desde 2 hasta N-1, si en algún momento la división es 0, entonces el número no es primo y sales del bucle, si llega a N-1 y sigue "sobrando" (mod>0) entonces es primo  :P

Saludos


Título: Re: Calcular si un nº dado es primo
Publicado por: luiggy2 en 10 Marzo 2009, 20:18 pm
Eso ya lo había pensado. El problema es que para la segunda parte necesito saber qué nº primos hay inferiores a ese.


Saludos!


Título: Re: Calcular si un nº dado es primo
Publicado por: Agente Naranja en 13 Marzo 2009, 13:06 pm
Bueno lo primero es sencillo, tal como dijo Novlucker pues irías dividiendo entre cada número menor que nuestro número, y si encuentras que ninguno lo divide, pues dirías que es primo.
Para saber los demás números primos inferiores, podrías hacer algo así como un doble bucle, por ejemplo:

Código
  1. $numero = 100;
  2.  
  3. // Bucle 1: Revisamos todos los numeros de 100 a 2
  4. for( $maximo = $numero; $maximo > 2; $maximo--){
  5.   //Bucle 2. Para cada numero, dividimos entre todos los inferiores a el.
  6.   for( $actual = $maximo; $actual > 2; $actual-- ){
  7.     if( $maximo % $actual == 0){
  8.        echo "El numero ($maximo) es un numero primo.<br />";
  9.        break;
  10.     }
  11.   }
  12. }
  13.  

Algo así es lo que se me ocurre ahora.