LeetCode #204. Count Primes
题目
解题方法
设置一个字典dic,其中键为从2到n左闭右开的所有数,值初始化为1。然后设置num=2,从2开始遍历到n的开根号2,每次循环中看看dic[num]是不是1,如果是1就说明是素数,这时把字典中的所有这个数的倍数都设置为0。如果是0说明不是素数,可以直接跳过了。循环结束统计dic中有多少值为1的键即可。
时间复杂度:O(nlog(logn))
空间复杂度:O(n)
代码
class Solution:
def countPrimes(self, n: int) -> int:
dic = {}
for i in range(2, n):
dic[i] = 1
num = 2
while num * num < n:
if not dic[num]:
pass
else:
for i in range(num * num, n, num):
dic[i] = 0
num += 1
primecount = 0
for key in dic.keys():
if dic[key]:
primecount += 1
return primecount