Project Eurler - Problem 7

来源:互联网 发布:snmp网络管理模型 编辑:程序博客网 时间:2024/06/11 03:12

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13. What is the 10001st prime number?

这里采用简单的办法求素数,不过还是要讲究一点效率:

1、2是唯一的偶数素数
2、所有比3大的素数可以表示为6k+1或者6k-1
3、判定一个数是否为素数的较快办法为从2到n的平方根,是否存在能整除n的因子,不存在则为素数。

def isPrime(n):    if n == 1:        return False    elif n < 4:        return True          # 2,3 都是素数    elif n % 2 == 0:        return False         # 除2外的偶数不是素数    elif n < 9 == 0:        return True          # 到此只可能是7了,是素数。    elif n % 3 == 0:        return False         # 使剩下的部分表示为6k加减1    else:        r = math.floor(math.sqrt(n))        f = 5                  # 第一个6k-1        while f <= r:            if n % f == 0:                return False            if n % (f+2) == 0:  # 6k-1+2成为6k+1                return False            f += 6            # 步伐6大跃进        return Truedef the10001stPrime():    p = 1    count = 1    while count < 10001:        p += 2        if isPrime(p):            count += 1    return p