统计所有小于非负整数 n 的质数的数量。
示例 1:
输入:n = 10
输出:4
解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
示例 2:输入:n = 0
输出:0
示例 3:输入:n = 1
输出:0
提示:
0 <= n <= 5 * 106
方法一:枚举
判断每个小于n所有数字i是否是质数:能否被小于i的数字整除。
def isPrimes(n):
for i in range(2,n):
if i*i>n:break #大于sqrt(n)的值不用判断
if n%i==0:return False
return True
方法二:厄氏筛法
总结起来就是对于质数x,则2x 3x 4x....都是非质数,通过一个map将质数非质数进行判断。
class Solution(object):
def countPrimes(self, n):
"""
:type n: int
:rtype: int
"""
sign = [True]*(n+1)
ans = 0
for i in range(2,n):
if sign[i]:
ans += 1
for j in range(2*i,n,i):
sign[j]= False
return ans