Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/12/2008, 06:31
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: que hay de malo en este codigo(programa para comprobar si un numero es pri

El error que estás cometiendo es este:

Haces:
Código:
Para (todos los números del 2 hasta el numero elegido):
    Si (numero es divisible entre X) entonces "no es primo" y salgo del bucle
    Y si no, entonces "sí es primo" y salgo del bucle
fin del bucle
El problema que hay en ese pseudocódigo es que sólo compruebas el primero de los divisores. Es decir, estás haciendo esto...

Código:
Empiezo el bucle con divisores = 2
    Es divisible entre 2?
        Sí: Entonces digo que no es primo y he terminado
        No: Entonces digo que sí es primo y he terminado
Como en cualquiera de los dos casos he terminado, pues ya no sigo más
Lo que quieres hacer no es eso, sino:

Código:
EsPrimo = true
Para (todos los números del 2 hasta el numero elegido):
    Si (numero es divisible entre X) entonces guardo pongo EsPrimo = false y salgo del bucle
    Y si no, sigo con el siguiente elemento del bucle
fin del bucle
//Si he llegado hasta aquí y EsPrimo sigue siendo true, es que no ha sido divisible por ninguno de los elementos del bucle. Así que:
Si EsPrimo == true entonces digo "es primo"
Si no, entocnes digo "no es primo"

Por último decir que sí, hay maneras mejores de comprobar si un número es primo, pero una optimización MUY básica que puedes hacer sin tener que pensarlo siquiera, es que no necesitas comprobar como divisores todos los números desde 2 hasta el N-1, basta que compruebes desde 2 hasta la raíz cuadrada de N.