Leetcode204. 計數質數

  • 題目要求

image.png

  • 思路數組

    • 建立一個數組mylist,長度爲n,數組初始化全部元素爲True
    • 建立另外一個數組res,用來保存質數
    • 數組的0下標位置賦值爲Fals,表示1不是質數
    • 遍歷數組下標1~n,也就是遍歷數字2-n,若是當前位置爲True,把當前的元素append到結果集裏,並把數組mylist中,全部當前元素的倍數都置爲False,若是當前位置爲False,xountine繼續下一次循環
    • 最後返回res的長度
  • 核心代碼:
# 初始化標記數組
mylist = [True]*n
# res用來保存質數
res = []
# 由於1不是質數,因此數組下標爲0的位置置爲False
mylist[0] = False
# 遍歷數字1~n
for i in range(1,n):
    # 若是標記數字是否爲質數的值爲False,說明它是某個數的倍數,直接continue進入下一次循環
    if mylist[i-1] is False:
        continue
    # 若是爲True
    else:
        # 把當前的數字append到結果集中
        res.append(i)
        # 遍歷從當前數字開始到結束的數字,步長爲當前數組,也就是把當前數字全部的倍數找到,而後把它的數組的標記位置置爲False
        for j in range(i,n,i):
            mylist[j-1] = False
# 返回保存質數結果數組的長度
return len(res)
  • 完整代碼:app

    • 加上了判斷給定的n值是否小於等於1
class Solution:
    def countPrimes(self, n: int) -> int:
        if n <= 1:
            return 0
        mylist = [True]*n
        res = []
        mylist[0] = False
        for i in range(1,n):
            if mylist[i-1] is False:
                continue
            else:
                res.append(i)
                for j in range(i,n,i):
                    mylist[j-1] = False
        return len(res)
相關文章
相關標籤/搜索