Código
## 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:
Código:
http://es.wikipedia.org/wiki/Criba_de_Erat%C3%B3stenes
http://es.wikipedia.org/wiki/Conjetura_de_Goldbach
Saludos