leetcode 204. Count Primes 计算质数的数目

Count the number of prime numbers less than a non-negative number, n.

Example:

Input: 10
Output: 4
Explanation: There are 4 prime numbers less than 10, they are 2, 3, 5, 7.

常规方法很容易超时,要使用高效的算法,这是google得到的

厄拉多塞筛法(Sieve of Eeatosthese)。

具体操作:先将 2~n 的各个数放入表中,然后在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一个数 是5,将它画圈,并划去5的其他倍数……依次类推,一直到所有小于或等于 n 的各数都画了圈或划去为止。这时,表中画了圈的以及未划去的那些数正好就是小于 n 的素数。

在这里插入图片描述

class Solution {
public:
    int countPrimes(int n) {
        
    int count=0;
    
    if(n==0) return 0;//初始化布尔数组
    bool b[n]={0};
        
        //如果不是之前质数的倍数,则count++,标记其所有倍数
    for(int t=2;t<n;t++){                   	
        if(!b[t]) {count++;
                   for(int i=t;i<n;i+=t){
                       b[i]=true;
                   }
                  }
        
    }
        return count;
    }
        
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值