Description:
Count the number of prime numbers less than a non-negative number, n
题目意思就是统计1~n之间有多少素数。C语言教程中提到一种求素数的方法,如果X不能被2~sqrt(x)之间的数整除,则x是素数,
但是这样会出现time limit out,超时,接下来要优化这种方法,就是记录已经找到的素数,拿x除以已经找到的素数........
class Solution {
public:
vector<int> flag;
int countPrimes(int n) {
int result = 0;
if(n<3)
return 0;
for (int i = 2; i<n; i++)
{
if (i % 2 == 0)
continue;
if (isprime(i))
{
result++;
flag.push_back(i);
}
}
return result+1;
}
bool isprime(int x)
{
for (int k = 0; k < flag.size(); k++)
{
if (flag[k]>sqrt(x))
break;
if (x%flag[k] == 0)
return false;
}
return true;
}
};