1. 程式人生 > >leetcode204:計算質數

leetcode204:計算質數

思想:

判斷n是否小於2,若是則返回0(由於0和1都不是質數)。定義一個dp存放標誌位,若為值1則標誌是質數,若為值0則標誌不是質數。dp[0]=0和dp[1]=0代表數字0和1都不是質數。迴圈函式helper的功能是給比n小的2的倍數自己除外(例如4,6,8...),3的倍數,5的倍數,7的倍數等等質數的倍數賦值0(代表他們都不是質數)。當其中一個質數的倍數大於n則結束迴圈。然後計算dp中1的個數即為質數的量。

class Solution:
    def countPrimes(self, n):
        """
        :type n: int
        :rtype: int
        """
        def helper(n, dp):
            for i in range(2, n):
                if dp[i] == 1:
                    k = i * i
                    if k >= n:
                        return
                    while k < n:
                        dp[k] = 0
                        k += i

        if n < 2:
            return 0
        dp = [1] * n
        dp[0] = 0
        dp[1] = 0
        helper(n, dp)
        return sum(dp)