题目
代码部分一(246ms, 15.70%)
class Solution {
public int countPrimes(int n) {
if(n < 2) return 0;
int res = 0;
for(int i = 2; i < n; i++){
res += isPrimes(i);
}
return res;
}
public int isPrimes(int n){
if(n == 2 || n == 3) return 1;
if(n % 6 != 1 && n %6 != 5) return 0;
int temp = (int)Math.sqrt(n);
for(int i = 5; i <= temp; i += 6){
if(n %i == 0 || n % (i+2) == 0) return 0;
}
return 1;
}
}
代码部分二(9ms 98.96%)
class Solution {
public int countPrimes(int n) {
if(n < 3) return 0;
boolean[] flag = new boolean[n];
int count = n / 2;
for(int i = 3; i*i < n; i += 2){
if(flag[i]) continue;
for(int j = i*i; j < n; j += 2*i){
if(!flag[j]){
count--;
flag[j] = true;
}
}
}
return count;
}
}