判断素数的几个tips:
判断到sqrt(n)的时候就可以了,后面的数不用看(因为如果能被整除,一定是一个大于sqrt,一个小于sqrt,或都等于)。
所有数字都是由素数组成的,所以只看素数就可以了。
class Solution {
public:
vector<int> primeVec;
bool isPrime(int n){
int half = sqrt(n);
int len = primeVec.size();
for(int i = 0;i<len;i++){
int tmp = primeVec[i];
if(half<tmp) break;
if(n%tmp == 0) return false;
}
return true;
}
int countPrimes(int n) {
if(n<=2) return 0;
for(int i = 2;i<n;i++){
if(isPrime(i)) primeVec.push_back(i);
}
return primeVec.size();
}
};
不过这个程序还是太慢了,比起一些大神的,以后再研究。