Foros del Web » Programando para Internet » Python »

que hay de malo en este codigo(programa para comprobar si un numero es primo)

Estas en el tema de que hay de malo en este codigo(programa para comprobar si un numero es primo) en el foro de Python en Foros del Web. Hola, recien comienzo en el mundo d ela programacion y después de buscar un lenguje me decidi pro python luego de leer libros en ingles ...
  #1 (permalink)  
Antiguo 13/12/2008, 17:11
 
Fecha de Ingreso: enero-2005
Mensajes: 95
Antigüedad: 19 años, 3 meses
Puntos: 0
De acuerdo que hay de malo en este codigo(programa para comprobar si un numero es primo)

Hola, recien comienzo en el mundo d ela programacion y después de buscar un lenguje me decidi pro python luego de leer libros en ingles me he aventurado a tratar de hacer mis primeros programas apra ir poniendo en practico lo leído, en estos momentos estoy con un script para determiar si un numero es primo o no


Código:
print"****** calcula si el numero ingresado es un numero primo*******\n"
numero=input("ingrese un numero para comprobar si es primo: ")

if numero >2:
	for divisores in range (2, numero):
		if (numero%divisores)==0:
			print numero,"no es primo"
			break
		
		else:
			print numero, "es primo"
			break

elif numero ==2:	
	print numero, "es primo"				
else:
	print("No es primo")
	
raw_input()
debe haber una forma mas facil de hacerlo pero el codigo anterior fue lo primero que se me vino en mente, el problema que tengo es que cuando ingreso números que sean únicamente multiplos de 3(15,21,27...) el programa me arroja que el numero introducido es primo y no entiendoc omo puede ser ya que cuadno se divide 15/3 me da modulo cero con lo cual es loop tendria que romper con el break y decir el numero no es primo que error estaré cometiendo?
__________________
customsmf
Seo,tutoriales,decargas
  #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.
  #3 (permalink)  
Antiguo 15/12/2008, 20:06
 
Fecha de Ingreso: enero-2005
Mensajes: 95
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: que hay de malo en este codigo(programa para comprobar si un numero es pri

muchas gracias de verdad, intentare rehacer el codigo haber que logro saludos
__________________
customsmf
Seo,tutoriales,decargas
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 01:34.