В настоящее время я пытаюсь найти самое большое простое число, содержащееся в другом большом количестве.Ошибка памяти в Python для циклов
maxlen = 1024
for i in range(1023, -1, -1):
maxlen -= 1
number = ""
for k in range(maxlen, -1, -1):
number = pi[k] + number
if isprime(number) == True:
print number
isprime() - это функция, которая проверяет, является ли число простым (довольно стандартным). это работает довольно хорошо до определенного момента, когда я получаю MemoryError.
Это не потому, что число, проверенное функцией, слишком велико, так как оно происходит вокруг шестого пробега первого цикла.
Я уже пробовал gc.enable() и gc.collect() без какого-либо положительного результата.
У кого-нибудь есть идея, как это исправить?
Edit: определение пи и IsPrime() согласно запросу:
f = open("/root/number", "r")
pi = f.read()
f.close()
где файл «номер» содержит оригинальный номер, в котором я хотел бы найти простое число.
def isprime(n):
n = abs(int(n))
if n < 2:
return False
if n == 2:
return True
if not n & 1:
return False
for 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
for x in range(3, int(n**0.5)+1, 2):
MemoryError
Какое определение 'isprime'? –
Также вы могли бы предоставить вывод трассировки? –
Что такое 'pi'? И почему вы просто не используете 'for maxlen в диапазоне (1023, -1, -1):'? – JAB