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; } } };