elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Python] Optimizar busqueda de primos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Python] Optimizar busqueda de primos  (Leído 3,017 veces)
camaleonh

Desconectado Desconectado

Mensajes: 11


Ver Perfil
[Python] Optimizar busqueda de primos
« en: 28 Febrero 2012, 08:16 am »

Hola a todos
Este algoritmo es hasta el que he podido llegar con mayor velocidad a encontrar numeros primos, el problema es que busco encontrar un numero primo de más de 20 cifras pero demora una eternidad, entonces cualquier optimización me sirve de mucha ayuda

Código
  1. #!/usr/bin/env python
  2.  
  3. #Buscador de Numeros primos a partir de un numero dado
  4. # Juan Fernando Hernandez
  5. # Universidad de Antioquia - Matematicas Discretas
  6. # uso: python eratostenes_criba.py numero_inicial
  7.  
  8. from math import sqrt
  9. import sys
  10.  
  11. # Lista de primos y semaforo de llenado de lista
  12. lista_p = [2]
  13.  
  14.  
  15. ultimo_numero = 2
  16. breaker = 1
  17.  
  18. # Busqueda de primos (true->primo || false->compuesto)
  19. def primo(numero):
  20.  
  21. # si es divisible por la lista no es primo (Retorna falso)
  22. for i in lista_p:
  23. modulo = numero % i
  24. if (modulo == 0): return False
  25. # Se sabe que como el numero inmediatamente anterior en el bucle es
  26. # menor, todos los primos de la lista < raiz de numero actual
  27.  
  28. return llenar_lista(numero)
  29.  
  30. def llenar_lista(numero):
  31.  
  32. global breaker
  33. global ultimo_numero
  34.  
  35. raiz = long(sqrt(numero))
  36. # Necesario para no comprobar todos los primos de la lista
  37. # se establece un breaker
  38.  
  39. lista_p_len = len(lista_p)
  40. raiz_raiz = long(sqrt(raiz))
  41.  
  42. for i in range(breaker,lista_p_len):
  43. if (lista_p[i] >= raiz_raiz):
  44. breaker = i;
  45. break;
  46.  
  47. ultimo_numero += 1
  48.  
  49. for i in range(ultimo_numero,raiz+1):
  50. for n in range(0,breaker):
  51. modulo = i%lista_p[n]
  52. if (modulo == 0):
  53. break
  54. elif (n == breaker-1):
  55. lista_p.append(i)
  56. modulo_numero = numero % i
  57. if(modulo_numero == 0):
  58. ultimo_numero = i
  59. return False
  60.  
  61. ultimo_numero = raiz
  62. return True
  63.  
  64.  
  65.  
  66. def main():
  67.  
  68.    #n = 10000000000000000000 #Numero minimo
  69.    n = long(sys.argv[1])  # Minimo numero desde el cual buscar el proximo primo
  70.  
  71.  
  72.    while True:
  73.        print "Probando primo: ", n
  74.        if(primo(n)):
  75.            break;
  76.        n += 1
  77.  
  78.    print "Primo encontrado: ", n
  79.  
  80. if __name__ == "__main__":
  81.    main()
  82.  
  83.  


« Última modificación: 28 Febrero 2012, 08:35 am por camaleonh » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Python 2.6] Funcion generadora de Numeros primos (5.761.455 primos en 19 seg)
Scripting
katas 2 9,532 Último mensaje 10 Marzo 2010, 01:50 am
por Novlucker
[Python] Listas y números primos.
Scripting
Meta 5 20,963 Último mensaje 14 Noviembre 2010, 04:48 am
por Meta
[Python] - Primos y matrices. « 1 2 »
Scripting
Meta 12 11,742 Último mensaje 20 Noviembre 2010, 13:42 pm
por [L]ord [R]NA
Optimizar algoritmo de búsqueda BFS
Programación C/C++
KINGARZA 1 2,484 Último mensaje 3 Agosto 2016, 13:26 pm
por AlbertoBSD
Optimizar busqueda en un datagridview
.NET (C#, VB.NET, ASP)
carlos7x 4 5,444 Último mensaje 6 Septiembre 2017, 15:33 pm
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines