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
Post a Comment