15算法课程 204. Count Primes

来源:互联网 发布:帝国cms留言表单 编辑:程序博客网 时间:2024/06/11 18:59


Description:

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


solution:

埃拉托色尼筛选法,针对自然数列中的自然数而实施的,用于求一定范围内的质数。

一个合数总是可以分解成若干个质数的乘积,那么如果把质数的倍数都去掉,那么剩下的就是质数了。
任意合数肯定都有一个因子小于合数的开方。
比如找100以内的素数。
首先2是素数,把2的倍数去掉;此时3没有被去掉,可认为是素数,所以把3的倍数去掉;再到5,再到7,而因为8,9,10刚才都被去掉了,而任意合数肯定都有一个因子小于合数的开方(100开方10),因此当去掉2,3,5,7的倍数后剩下的都是质数了。


code:

class Solution {public:    int countPrimes(int n) {        vector<bool> isPrime(n,true);        for(int i=2;i<=sqrt(n);i++){            if(!isPrime[i]){                continue;            }            for(int j=i*i;j<n;j+=i){                isPrime[j]=false;            }        }        int cnt=0;        for(int i=2;i<n;i++){            if(isPrime[i]){                cnt++;            }        }        return cnt;    }};