我试图用使用莫索酯的筛子找到第n个素数。 是的,我看到了类似的帖子,但我对这个代码有疑问。 我想在找到第n个素数后停止算法。这就是我写的:
def nth_prime(n):
limit = 10**2
pn = 1 #keeps track of how many prime numbers we have found
sieve = range(3, limit, 2)
top = len(sieve)
for si in sieve:
if si:
pn += 1
print pn, si #used to check while coding
if pn == n:
return si #loop breaks when the nth prime is found
else:
bottom = (si*si - 3)/2
if bottom >= top:
break
sieve[bottom::si] = [0] * -((bottom-top)//si)
print nth_prime(11)
虽然它没有用。至少不是我想要的。如果我添加返回过滤器(无,筛)[n-2] ,它可以正常工作。但我希望它在第n个素数时停止计算。 这是输出:
2 3
3 5
4 7
5 11
None
虽然我希望它能继续下去:
...
11 31
如果该功能能够正确计算所有筛分限制,为什么输出表现如此?
答案 0 :(得分:0)
Python break
命令breaks out of loops, not out of tests(if
- else
)。我通过重新编写逻辑来消除break
命令来实现它。也就是说,
if bottom < top:
sieve[bottom::si] = [0] * -((bottom-top)//si)