寻找特定的素数

时间:2014-03-12 21:49:10

标签: python primes

以下是我找到特定素数的实现:

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:我正在打印出所有的素数,以便将其视为偏好。这不是必需的。

1 个答案:

答案 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秒)