私は現在、別の大きな数に含まれる最大の素数を見つけようとしています。
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が発生する特定の時点まではかなりうまく機能します。
これは、最初のforループの6回目の実行付近で発生するため、関数によってチェックされる数が多すぎるためではありません。
私はすでにgc.enable()とgc.collect()を試しましたが、肯定的な結果は得られませんでした。
誰かがこれを修正する方法を知っていますか?
編集:リクエストに応じたpiとisprime()の定義:
f = open("/root/number", "r")
pi = f.read()
f.close()
ここで、ファイル「number」には、素数を見つけたい元の番号が含まれています。
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 (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