思路数组
# 初始化标记数组 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)