埃式筛选法
-
埃式筛选法主要用于筛选素数
-
思想
- 如果一个数为素数,那么这个素数的倍数一定是合数,从2、3开始,筛掉它们的倍数,那么出2、3外未被筛选掉的数中最小min的那个就是素数(2 * 3 = 6;已被筛掉,所以前面不可能有数可以被min整除了,即可推出min为素数),再筛掉min的所有倍数,以此类推
- 代码如下
// 【埃筛法】 计算n以内素数的个数
public static int eratosthenes(int n){
// 初始化为false,false代表素数(2,3都为素数,所以一开始初始化都为false是可以的)
boolean[] isPrime = new boolean[n];
int count = 0;
for(int i = 2;i <n; i++){
if(!isPrime[i]){
count++;
for(int j = i * i; j < n; j+= i){
//素数的倍数都是合数,所以都可以标为true
// j从 i*i开始而不是从2*i开始,是因为2~(i-1)前面标记过了
// j += i 等价于 j = i * (i + 1)
isPrime[j] = true;
}
}
}
return count;
}