美文网首页
素数的个数

素数的个数

作者: vckah | 来源:发表于2018-05-24 08:59 被阅读0次

    求小于 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 的高级特性切片


    切片

    相关文章

      网友评论

          本文标题:素数的个数

          本文链接:https://www.haomeiwen.com/subject/vosjjftx.html