leetcode题目 质数问题
Description:
Count the number of prime numbers less than a non-negative number, n
解决方案:
class Solution {
public:
int countPrimes(int n) {
bool *p=new bool[n];
for(int i=1;i<=n-1;i+=2)
{
p[i]=true;
}
int num=(n-1)-(n-1)/2; //减去1和包含的偶数个数(除了2以外)
for(int i=3;i<=(n-1)/2;i+=2) //这里i只要到(n-1)/2就可以了 因为一半以后的数乘j必然大于n-1
{
for(int j=3;j*i<=n-1;j+=2)
{
if(p[j*i]==true) //最开始没有加这个判断,结果会num重复减去很多
{
p[j*i]=false;
num-=1;
}
}
}
if(n==1 || n==0 || n==2) return 0;
delete[] p;
return num;
}
};
运行时间56ms
最开始一直想办法从素数的