题目:
统计所有小于非负整数 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)