快樂的LeetCode --- 204. 計數質數

題目描述:

統計所有小於非負整數 n 的質數的數量。

示例:

輸入: 10
輸出: 4
解釋: 小於 10 的質數一共有 4, 它們是 2, 3, 5, 7

解題思路1: 超出時間限制

引入flag標誌,利用for循環進行判斷


代碼1:

class Solution(object):
    def countPrimes(self, n):
        i = 2
        res = []
        while(i < n):
            flag = 0
            for j in range(2, i):
                if i % j == 0:
                    flag = 1
                    break
            if flag == 0:
                res.append(i)
            i += 1
        return len(res)

解題思路2:

質數篩選


代碼2:

import math
class Solution:
    def countPrimes(self, n):
        prime_indicator = [i >= 2 for i in range(n)]
        for i in range(2, int(math.ceil(math.sqrt(n)))):   # math.ceil(2.3) = 3 向上取整
                                        # 等價寫法   for i in range(2, int(n ** 0.5) + 1):
            if prime_indicator[i]:
                for j in range(i**2, n, i):
                    prime_indicator[j] = False

        return sum(prime_indicator)

題目來源:

https://leetcode-cn.com/problems/count-primes/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章