Я знаю, что следующее не является самым быстрым способом создания списка простых чисел, однако я поставил перед собой проблему, и перед поиском в Google написал следующую программу. Он работает нормально для чисел <~ 44 000, но затем выдает ошибку сегментации при запуске на моем 2 ГГц Core 2 Duo Macbook. В настоящий момент я не очень заинтересован в альтернативных методах, но в том, почему он дает мне ошибку. </p>
Последнее простое число, которое он может рассчитать, - это 42751, прежде чем он умрет, сказав «Ошибка сегментации».
from sys import argv, exit, setrecursionlimit
def isPrime(no, halfNo, x = 3):
# if counted through and all numbers from 3 too x are not factors is prime
if x > halfNo:
print no
return 1
# is x a factor?
if no % x == 0:
return 0
else:
isPrime(no, halfNo, x + 2)
path, limLow, limHigh = argv
limLow = int(limLow)
limHigh = int(limHigh)
setrecursionlimit(limHigh)
# negitive numbers, 0 and 1 are not primes so answer invalid
if limLow < 2:
exit('Invalid input');
# if lower limit is even its not prime so increase by 1
if limLow % 2 == 0:
limLow += 1
while (limLow <= limHigh):
isPrime(limLow, limLow / 2)
limLow += 2