LeetCode #204. Count Primes

题目

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
posted @ 2020-12-07 13:38  老鼠司令  阅读(29)  评论(0编辑  收藏  举报