Leetcode练习(Python):哈希表类:第204题:统计所有小于非负整数 n 的质数的数量。

题目:
统计所有小于非负整数 n 的质数的数量。
思路:
按照标签使用哈希表,借助判断质数的函数导致超时了,如程序1所示,测试可以通过。后来看使用一种很快的方法叫厄拉多塞筛法,如程序2所示。
程序1:
class Solution:
    def countPrimes(self, n: int) -> int:
        myHashMap = set([])
        for index1 in range(n):
            if self.findPrimeNumber(index1) == True:
                myHashMap.add(index1)
        return len(myHashMap)
    def findPrimeNumber(self, num: int) -> bool:
        if num == 0:
            return False
        if num == 1:
            return False
        if num == 2:
            return True
        if num > 2:
            for index in range(2, num):
                if num % index == 0:
                    return False
                    break
            else:
                return True
        else:
            return False
程序2:
class Solution:
    def countPrimes(self, n: int) -> int:
        if n == 0:
            return 0
        if n == 1:
            return 0
        if n == 2:
            return 0       
        prime = [1] * n
        prime[0] = prime[1] = 0
        for index1 in range(2, int(n**0.5) + 1):
            if prime[index1] == 1:
                for index2 in range(index1 * index1 , n, index1):
                    prime[index2] = 0
        return sum(prime)
原文地址:https://www.cnblogs.com/zhuozige/p/12787374.html