leetcode204:計算質數
阿新 • • 發佈:2018-11-11
思想:
判斷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)