素数——埃氏筛&欧式筛(Java)
埃氏筛:
public class Main {
static final int MAXN = 100000005;
public static void main(String[] args) {
int n = 100; // 需要的 n 的值
boolean[] isnp = new boolean[MAXN];
init(isnp, n);
}
public static void init(boolean[] isnp, int n) {
for (int i = 2; i * i <= n; i++) {
if (!isnp[i]) {
for (int j = i * i; j <= n; j += i) {
isnp[j] = true;
}
}
}
}
}
欧式筛:
public class Main {
static final int MAXN = 100000005;
public static void main(String[] args) {
int n = 100; // 需要的 n 的值
boolean[] isnp = new boolean[MAXN];
List<Integer> primes = new ArrayList<>();
init(isnp, primes, n);
}
public static void init(boolean[] isnp, List<Integer> primes, int n) {
for (int i = 2; i <= n; i++) {
if (!isnp[i]) {
primes.add(i);
}
for (int p : primes) {
if (p * i > n) {
break;
}
isnp[p * i] = true;
if (i % p == 0) {
break;
}
}
}
}
}
在Java中,数组是对象,如果将一个数组作为参数传递给一个方法,这个方法对数组的修改会影响到原始数组。因此,在这个例子中,如果在 init
方法中修改了 isnp
数组的值,那么这些修改会反映在原始的 isnp
数组上。