素数的个数

求小于 n 的素数的个数
厄拉多塞筛法,这种算法好像在信息安全数学基础中讲到过,果然学过的知识还是有用啊。
思路:标记当前数的倍数,直到 √n (根号下 n)

图片来源于网络,如有侵权,望告知
# _*_ cpding:utf-8 _*_

def countPrimes(n):
    if n < 2:
        return 0
    isPrime = [True]*n
    isPrime[0] = isPrime[1] = False
    x = 2
    while x*x < n:
        if isPrime[x]:
            p = x*x
            while p < n:
                isPrime[p] = False
                p +=x
        x += 1
    return sum(isPrime)
# 利用 Python 的特性 切片
def countPrimes1(n):
    if n < 3:
        return 0
    primes = [True] * n
    primes[0] = primes[1] = False
    for i in range(2, int(n ** 0.5) + 1):
        if primes[i]:
            primes[i * i: n: i] = [False] * len(primes[i * i: n: i])
    return sum(primes)

def main():
    a = 100
    print countPrimes1(a)

if __name__ == '__main__':
    main()

第二种方法用到了 Python 的高级特性切片


切片

你可能感兴趣的:(素数的个数)