求包含n的n以内所有质数,从第一个质数开始,则该质数的倍数为合数,一直到sqrt(n),便可以找出所有质数
class Solution {
public:
    int countPrimes(int n) 
    {
        if (n <= 2) return 0;
        vector<bool> primes(n+1,true);
        for(int i=3;i<=sqrt(n);i++)
        {
            if(primes[i])
            {
                for(int j=i*i;j<=n;j+=i)
                    primes[j]=false;
            }
        }
        int count=0;
        for(int i=2;i<=n;i++)
            if(primes[i]) count++;
        return count;
    }
};原文:http://blog.csdn.net/lp2hsf/article/details/45576605