204. Count Primes

xuhang57發表於2019-02-16

題目連結: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)

相關文章