So I'm writing some code for a little prime number theory project of mine and I keep dealing with a memory error at some upper bound for some input value. I'm wondering if there might be a means to circumventing the problem and allowing the program to continue its computation, even if it takes more memory/time/etc. than what is normally allowed for?
My error:
but is no problem if I do this:
The getGCD and ifPrime block (lines 31 to 45):
and the getDPF or distinct prime factors block (lines 82 to 102):
Any useful tidbits?
My error:
>>> x.getDPF(987654321) Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> x.getDPF(987654321) File "C:\Python27\projects\primes.py", line 87, in getDPF if self.ifPrime(val) == 1: File "C:\Python27\projects\primes.py", line 42, in ifPrime for inc in range(1,val): MemoryError
but is no problem if I do this:
>>> x.getDPF(123456789) [[3, 2], [3607, 1], [3803, 1]]
The getGCD and ifPrime block (lines 31 to 45):
def GCD(self, alpha, beta): if beta == 0: return alpha else: return self.GCD(beta, alpha % beta) def ifPrime(self, val): #checks if prime if val <= 1: return 0 for inc in range(1,val): if self.GCD(val, inc) != 1: return 0 return 1
and the getDPF or distinct prime factors block (lines 82 to 102):
def getDPF(self, val): #gives distinct prime factors: i.e. 12546 -> [[2,1][3,2][17,1][41,1]] self.list_dist = self.clearList(self.list_dist) if self.ifPrime(val) == 1: return [[val,1]] else: for i in range(len(self.getPrimeFactor(val))): self.list_dist.append([0]) self.list_dist[i][0] = self.list_pfactor[i] self.list_dist[i].append(1) for j in range(len(self.list_pfactor)): incr = 0 while float(val)/self.list_pfactor[j] == val/self.list_pfactor[j]: val /= self.list_pfactor[j] incr += 1 self.list_dist[j][1] = incr return self.list_dist
Any useful tidbits?