素数——埃氏筛&欧式筛(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 数组上。
本文介绍了在Java中使用埃氏筛和欧式筛算法找出素数,并讨论了由于数组传递特性,方法中对数组的修改可能影响原始数组的问题。
&spm=1001.2101.3001.5002&articleId=137439214&d=1&t=3&u=95c4ced96b4944a1bf4c1687b8d37c11)
1222

被折叠的 条评论
为什么被折叠?



