这道题建立一个nums[n+1]的数组,num[i]表示i是否为prime number,初始化为True。
遍历range(2, n),每次将nums[i*2], nums[i*3]...nums[i*k] (i*k <= n)设置为False。
最后返回nums数组中≥2且值为True的数字。
这里有个优化的地方:如果遍历到i时,发现nums[i]已经为0了,说明之前已经遇到了i的因数,不需要再将nums[i*2], nums[i*3]...再置为0。
class Solution(object):
def countPrimes(self, n):
"""
:type n: int
:rtype: int
"""
if n <= 2:
return 0
nums = [1] * n
for i in range(2, n):
if nums[i] == 0:
continue
for j in range(i*2, n, i):
nums[j] = 0
return sum(nums[2:])