LeetCode 204-Count Primes

Description:

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

描述:计算小于n的质数的个数

  这里用到的方法是埃拉托色尼筛选法(Sieve of Eratosthenes),思路大致为:对于1~n-1这些数,首先1不是质数也不是合数,不需要考虑。从2开始,2是质数,那么把范围内所有能被2整除的数都筛掉(4,6,8,10...),它们肯定不是质数。然后到了3,同样地把剩下的没有标记能被3整除的筛掉。这里有个技巧就是,从3*3开始筛,因为3*3之前的能被3整除的(6)已经被筛除了。遍历从2到根号n就可以了,因为大于根号n的合数必定有一个2到根号n的因子,所以肯定会被筛去的。

  p.s.为什么我打latex公式都会居中啊。。。囧rz,我再研究研究把那个根号打出来

  AC代码如下:

class Solution {
public:
    int countPrimes(int n)
    {
        //如果为true表示是素数,false表示不是素数
        if(n<=2)
        {
            return 0;
        }
        else
        {
            bool * isPrime = new bool[n];
            int i,j;
            for(i=2;i<n;i++)
            {
                isPrime[i]=true;
            }
            for(i=2;i*i<n;i++)
            {
                if(isPrime[i]==true)
                {
                    for(j=i*i;j<n;j+=i)
                    {
                        isPrime[j]=false;
                    }
                }
            }
            int cnt=1;
            for(i=3;i<n;i+=2)
            {
                if(isPrime[i]==true)
                {
                    cnt++;
                }
            }
            delete [] isPrime;
            return cnt;
        }
    }

};

 

posted on 2015-10-09 15:29  露台上对望  阅读(181)  评论(0编辑  收藏  举报

导航