题目描述:
统计所有小于非负整数 n 的质数的数量。
示例:
输入: 10
输出: 4
解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
解法1:
厄拉多塞筛法:
先将2-N的各数放入表中,然后在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一个数 是5,将它画圈,并划去5的其他倍数……依次类推,一直到所有小于或等于N的各数都画了圈或划去为止。这时,表中画了圈的以及未划去的那些数正好就是小于 N的素数。
在实现过程中,可以设置一个长度为n的数组,将所有值设为1.
然后从索引为2的数开始遍历数组,2是第一个质数,count加1,将所有索引2的倍数处的数置为0.直到2的倍数大于n为止
继续遍历数组,找到下一个不为0的数,count加1,将索引为该数字的倍数处的数字置为0,直到倍数大于n为止
class Solution(object):
def countPrimes(self, n):
"""
:type n: int
:rtype: int
"""
a=[1]*n
count=0
for i