题目描述:
统计所有小于非负整数 n 的质数的数量。
示例:
输入: 10
输出: 4
解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
解题思路1: 超出时间限制
引入flag标志,利用for循环进行判断
代码1:
class Solution(object):
def countPrimes(self, n):
i = 2
res = []
while(i < n):
flag = 0
for j in range(2, i):
if i % j == 0:
flag = 1
break
if flag == 0:
res.append(i)
i += 1
return len(res)
解题思路2:
质数筛选
代码2:
import math
class Solution:
def countPrimes(self, n):
prime_indicator = [i >= 2 for i in range(n)]
for i in range(2, int(math.ceil(math.sqrt(n)))): # math.ceil(2.3) = 3 向上取整
# 等价写法 for i in range(2, int(n ** 0.5) + 1):
if prime_indicator[i]:
for j in range(i**2, n, i):
prime_indicator[j] = False
return sum(prime_indicator)
题目来源: