我想要一个程序来生成最多10 ^ 9的素数。 我正在使用Sieve of Eratosthenes在python中实现它,但是当我尝试10 ^ 9时我遇到了内存错误。它工作正常,直到10 ^ 7。 这是我正在使用的代码
def prime(n):
p=[True]*(n+1)
p[0]=p[1]=False
for i in range(int(n**0.5)+1):
if p[i]:
for j in range(i*i, n+1, i):
p[j] = False
for i in range(n+1):
if p[i]:
yield i
我使用的是Windows 10,内存为6GB
答案 0 :(得分:1)
只需存储素数本身就可以获得巨大的加速,而不是在每个特定的素数上存储真或假。这将大大简化您的程序,它还应该允许您处理更大的值。
尝试编译素数列表,然后仅测试那些质数以查看是否有任何除数。这明显更快,我在这里没有内存问题,我尝试了素数(655360002)(我在维基百科上查找)没有问题。
def prime(n):
found_primes = []
for number in range(2, int(n**0.5)+1):
number_is_prime = True
# The new number can only be divisible by other primes
for divisor in found_primes:
if number % divisor == 0:
number_is_prime = False
break
if number_is_prime:
found_primes.append(number)
# Now that we have a list of primes, we test our number against them
for prime in found_primes:
if n % prime == 0:
return False
# IF we tried all primes, then we must be prime
return True