对于我的实验室,我被要求编写一个程序,使用Eratosthenes的Sieve打印掉100以下的素数。但是我已经编写了程序,并且正在打印出许多非素数,例如27,33和99。对不起的解释很抱歉,但这是我的代码,我希望有人可以提供一些建议或解决方案。谢谢!
public class SOE {
public static void main(String args[]) {
boolean [] myArray = new boolean[100];
int j=0;
for(int i=0;i<myArray.length;i++) { //Initialises array
myArray[i] = false;
}
for(int i=2;i<myArray.length;i++) { //loops through slot numbers
while(j<myArray.length) { //loops through multiples
if(j%i == 0 || j%5==0) {
myArray[j] = true;
}
j++;
}
}
for(int i=0;i<myArray.length;i++) { //prints out prime numbers
if(myArray[i]==false) {
System.out.println(i);
}
}
}
}
答案 0 :(得分:1)
Eratosthenes筛子通常更简单:
for(int i = 2; i < myArray.length; i++) {
if (myArray[i]) {continue;}
j = 2 * i;
while(j < myArray.length) {
myArray[j] = true;
j += i;
}
}
这将按顺序消除4, 6, 8, ...
,然后6, 9, ...
,然后跳过4
,然后10,...
,然后跳过6
...依此类推< / p>