Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Karcrack en 7 Julio 2010, 10:37 am



Título: [Python] Conjetura del Goldbach
Publicado por: Karcrack en 7 Julio 2010, 10:37 am
Hice esta aplicacion para subir nota en Informatica y pense que tal vez a alguien le sea de utilidad :xD

Código
  1. ## coding: utf-8
  2.  
  3. ## Criba de Eratóstenes
  4. def GetPrimes(n):
  5. # Obtenemos el lado de la criba
  6. nroot = int(n**0.5)
  7. # Marcamos todos los numeros como primos
  8. sieve = [True]*(n+1)
  9. # El 0 y el 1 no son primos
  10. sieve[0] = False
  11. sieve[1] = False
  12.  
  13. # Recorremos todos los números de 2 hasta la raíz
  14. for i in xrange(2, nroot+1):
  15. # Si esta marcado como primo...
  16. if sieve[i]:
  17. # Obtenemos la cantidad de multiples en el rango
  18. m = n/i - i
  19. # Marcamos todos sus multiplos como NO primos
  20. sieve[i*i: n+1:i] = [False] * (m+1)
  21. # Devolvemos solo los primos del rango
  22. return [i for i in xrange(n+1) if sieve[i]]
  23.  
  24. while True:
  25. try:
  26. n = int(raw_input("Dame un número:"))
  27. if (n % 2 == 0) and (n > 2):
  28. break
  29. int("x")
  30. except:
  31. print "Se necesita un número entero par mayor que 2."
  32.  
  33. print "*"*50
  34. print "Se aplicará la conjetura fuerte de Goldbach."
  35. print "Esta establece que cualquier número par mayor que 2 puede \nexpresarse como suma de DOS números primos"
  36. print "*"*50
  37.  
  38. p = GetPrimes(n)
  39. l = 0
  40.  
  41. for w in p:
  42. for v in p:
  43. if w + v == n:
  44. if w == l:
  45. exit = True
  46. break
  47. l = v
  48. print "%d+%d=%d" % (w,v,n)
  49. if exit == True:
  50. break

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

Saludos :D