Memory error in Python for loops -


i'm trying find largest prime number contained within large number.

maxlen = 1024 in range(1023, -1, -1):     maxlen -= 1     number = ""     k in range(maxlen, -1, -1):             number = pi[k] + number             if isprime(number) == true:                     print number 

isprime() function checks if number prime (pretty standard). works pretty point memoryerror.

this not because number checked function large since happens around 6th run of first loop.

i've tried gc.enable() , gc.collect() without positive result.

does have idea how fix this?

edit: definition of pi , isprime() per request:

f = open("/root/number", "r") pi = f.read() f.close() 

where file "number" contains original number in i'd find prime.

def isprime(n):     n = abs(int(n))     if n < 2:             return false     if n == 2:             return true     if not n & 1:             return false     x in range(3, int(n**0.5)+1, 2):             if n % x == 0:                     return false     return true 

traceback:

traceback (most recent call last):   file "./primal.py", line 36, in <module>     if isprime(number) == true:   file "./primal.py", line 24, in isprime     x in range(3, int(n**0.5)+1, 2): memoryerror 

use xrange instead of range, importantly in isprime, here:

for x in xrange(3, int(n**0.5)+1, 2): 

xrange doesn't create whole list in memory, while range does, not using results after iterated on them.

another tip: test isprime(n), there no need see if equal true, if does. :-)

if isprime(number):  # works if isprime(number) boolean true     ... 

Comments

Popular posts from this blog

c# - SVN Error : "svnadmin: E205000: Too many arguments" -

c# - Copy ObservableCollection to another ObservableCollection -

All overlapping substrings matching a java regex -