Eratosthenes Prime数字计划的筛选

时间:2014-11-12 21:10:41

标签: java arrays numbers

对于我的实验室,我被要求编写一个程序,使用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);
            }
        }
    }
}

1 个答案:

答案 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>