我从伪代码用 Java 实现了 Eratosthenes 筛:
public static void sieveofEratosthenes(int n) {
boolean numArray[];
numArray = new boolean[n];
for(int i = 0; i < n; i++)
numArray[i] = true;
int a = 0;
for(int i = 2; i < Math.sqrt((double)n); i++) {
if(numArray[i]) {
for(int j = (int)Math.pow(i, 2); j < n; a++) {
numArray[j] = false;
j += (a * i);
}
}
}
for(int i = 2; i < n; i++) {
if(numArray[i])
System.out.println(i);
}
}
当我是 15 时,它给我的输出:
2
3
5
7
8
11
12
13
14
为什么其中一些值不正确?我相信我的错误在于我如何定义和使用 bool 数组。谢谢!