Python:找到第n个素数

时间:2015-11-01 22:35:05

标签: python python-2.7 sieve-of-eratosthenes

我试图用使用莫索酯的筛子找到第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 

如果该功能能够正确计算所有筛分限制,为什么输出表现如此?

1 个答案:

答案 0 :(得分:0)

Python break命令breaks out of loops, not out of testsif - else)。我通过重新编写逻辑来消除break命令来实现它。也就是说,

    if bottom < top:
        sieve[bottom::si] = [0] * -((bottom-top)//si)