Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: camaleonh en 24 Febrero 2012, 00:32 am



Título: Problema de Memory Error Python
Publicado por: camaleonh en 24 Febrero 2012, 00:32 am
Este algoritmo lo que hace es calcular un numero primo con minimo 20 cifras, se que funciona bien con numeros pequeños pero cuando intento 20 cifras me salta memory error

Código
  1.  
  2. #!/usr/bin/env python
  3.  
  4. from math import sqrt
  5.  
  6. # Busqueda de primos (true->primo || false->compuesto)
  7. def primo (numero):
  8.    lista_p = []
  9.    max = int(sqrt(numero))
  10.  
  11.    # creo la lista de primos
  12.    for i in range(2,max):
  13.        if(primo_aux(i,lista_p)):
  14.            lista_p.append(i)
  15.  
  16.    return primo_aux(numero, lista_p)
  17.  
  18. # Busqueda con division entre los primos en (2, sqrt(n)) (Auxiliar)
  19. def primo_aux (numero, primos_m):
  20.    for i in primos_m:
  21.        if ((numero%i) == 0):
  22.            return False # no es primo por division exacta entre un primo
  23.    return True
  24.  
  25.  
  26. def main():
  27.  
  28.    n = long(10000000000000000000) #Numero de 20 cifras
  29.  
  30.    while True:
  31.        print "Entra"
  32.        if(primo(n)):
  33.            break;
  34.        n += 1
  35.  
  36.    print "Primo encontrado: %n", n
  37.  
  38. if __name__ == "__main__":
  39.    main()
  40.  

Cualquier ayuda es apreciada.


Título: Re: Problema de Memory Error Python
Publicado por: camaleonh en 25 Febrero 2012, 00:27 am
Solucionado, no debo usar range con números tan grandes por que se llena toda la memoria, mejor un ciclo while uno por uno, también se puede optimizar más.