Eratosthenes筛选输出问题

时间:2014-09-06 00:18:24

标签: java primes

此代码将用户提交的数字设置为数组的上限。然后,它将所有元素设置为true。之后,它遍历数组,并将所有非素数位置的元素设置为false。

然后,它打印出数组中的所有真(元素)数字,而不是它们的索引。但是,我无法弄清楚为什么我的代码在这里输出2,然后是用户输入数字范围内的所有奇数,因为所有真实元素应该只是实际的素数。

public static void main(String [] args){
    Scanner s = new Scanner(System.in);
    System.out.print("Please enter the largest integer to consider: ");
    int bounds = s.nextInt();
    boolean [] primes = new boolean[bounds];

    int j = 0;
    for(int i = 2; i < primes.length; i++) {
        primes[i] = true;
    }

    for(int x = 2; x < primes.length; x++) {
        for(int n = 2; j < primes.length; n++) {
            j = n * x;
            if(j < primes.length) {
                primes[j] = false;
            }
        }
    }

    for(int k = 0; k < primes.length; k++) {
        if(primes[k]) {
            System.out.println(k);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您正在使用jx的倍数设置为false。这适用于第一个循环,当x2时,j不会为下一个x循环重置,n { {1}}循环未重新输入,因此您将打印所有奇数。

在进入for j循环之前,将x重置为j

for

输入for(int x = 2; x < primes.length; x++){ j = x; for(int n = 2; j < primes.length; n++){ 的输出:

100