204. Count Primes

题目链接:Counting Primes

思路:
首先要知道如何判断一个数字是否为素数。具体方法可以看这里

其次,如果朴素的判断,那么会因为效率底下而超时。
所以在我们每次找到素数的时候,可以把素数的倍数都标记为非素数。这样可以节省轮询的时间。

算法复杂度

时间:O(nloglogn) (time complexity for Sieve of Eratosthenes Algorithm)
空间:O(n)

代码:

class Solution(object):
    def countPrimes(self, n):
        """
        :type n: int
        :rtype: int
        """
        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]:
                for j in range(i*i, n, i):
                    primes[j] = False
        
        return sum(primes)

    原文作者:xuhang57
    原文地址: https://segmentfault.com/a/1190000015469602
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞