思路數組
# 初始化標記數組 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
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)