开篇:
体会埃筛法的作用,以及优化后的部分
正文:
204.计数质数
题目描述:给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。
代码:
//暴力
class Solution {
public int countPrimes(int n) {
int count = 0;
for(int i=2;i<n;++i){
count += isPrime(i) ? 1 : 0;
}
return count;
}
private static boolean isPrime(int x){
for(int i=2;i*i<=x; ++i){
if(x % i==0){
return false;
}
}
return true;
}
}
//埃筛法
class Solution {
public int countPrimes(int n) {
boolean[] isPrime= new boolean[n];//初始化都设false,代表质数
int count = 0;
for(int i=2;i<n;i++){
if(!isPrime[i]){
count++;
for(int j=2*i;j<n;j+=i){//j为合数标记位
isPrime[j] = true;
}
}
}
return count;
}
}
//优化埃筛法
class Solution {
public int countPrimes(int n) {
boolean[] isPrime= new boolean[n];//初始化都设false,代表质数
int count = 0;
for(int i=2;i<n;i++){
if(!isPrime[i]){
count++;
for(int j=i*i;j<n;j+=i){//找不同,想作用【1】
isPrime[j] = true;
}
}
}
return count;
}
}
结尾:
【1】减少重复循环