[Python] Conjetura del Goldbach

Iniciado por Karcrack, 7 Julio 2010, 10:37 AM

0 Miembros y 1 Visitante están viendo este tema.

Karcrack

Hice esta aplicacion para subir nota en Informatica y pense que tal vez a alguien le sea de utilidad :xD

Código (python) [Seleccionar]
## coding: utf-8

## Criba de Eratóstenes
def GetPrimes(n):
# Obtenemos el lado de la criba
nroot = int(n**0.5)
# Marcamos todos los numeros como primos
sieve = [True]*(n+1)
# El 0 y el 1 no son primos
sieve[0] = False
sieve[1] = False

# Recorremos todos los números de 2 hasta la raíz
for i in xrange(2, nroot+1):
# Si esta marcado como primo...
if sieve[i]:
# Obtenemos la cantidad de multiples en el rango
m = n/i - i
# Marcamos todos sus multiplos como NO primos
sieve[i*i: n+1:i] = [False] * (m+1)
# Devolvemos solo los primos del rango
return [i for i in xrange(n+1) if sieve[i]]

while True:
try:
n = int(raw_input("Dame un número:"))
if (n % 2 == 0) and (n > 2):
break
int("x")
except:
print "Se necesita un número entero par mayor que 2."

print "*"*50
print "Se aplicará la conjetura fuerte de Goldbach."
print "Esta establece que cualquier número par mayor que 2 puede \nexpresarse como suma de DOS números primos"
print "*"*50

p = GetPrimes(n)
l = 0

for w in p:
for v in p:
if w + v == n:
if w == l:
exit = True
break
l = v
print "%d+%d=%d" % (w,v,n)
if exit == True:
break


Mas info:
http://es.wikipedia.org/wiki/Criba_de_Erat%C3%B3stenes
http://es.wikipedia.org/wiki/Conjetura_de_Goldbach


Saludos :D