以下是我找到特定素数的实现:
import math
def checkPrime(i):
if i == 3:
return True;
elif i == 2:
return True;
else:
count = 2;
prime = 2;
while count <= math.sqrt(i):
if (i % count == 0):
prime += 1;
count += 1;
if prime == 2:
return True;
else:
return False;
x = 0;
c = 2;
while x < 10001:
if checkPrime(c) == True:
print c;
x += 1;
c += 1;
我用它来找到第10,001个素数(我从Project Euclid中得到的一个问题)。但是,在我看来,这似乎不是解决问题的有效方法。它占用了大量的计算能力(从完成执行需要大约20秒的事实可以看出)。我自己解决了这个问题,但是花费的时间是令人生畏的。
实现此问题的最有效方法是什么?
P.S:我正在打印出所有的素数,以便将其视为偏好。这不是必需的。答案 0 :(得分:1)
def fast_primes(max_n):
numbers = range(3, max_n+1, 2)
half = (max_n)//2
initial = 4
for step in xrange(3, max_n+1, 2):
for i in xrange(initial, half, step):
numbers[i-1] = 0
initial += 2*(step+1)
if initial > half:
return [2] + filter(None, numbers)
start = 5
tmp = []
while len(tmp) < 10001:
tmp=fast_primes(start)
start <<=1
print tmp[10001]
对我来说似乎很快(在我的边缘计算机上花了0.02秒)