在Prime中缺少2和3

时间:2014-01-30 02:13:17

标签: java

我错过了输出中的素数,2和3。

public static ArrayList<Integer> findPrimes(int n){

    ArrayList<Integer> primes = new ArrayList<Integer>();

    for (int i = 2; i < n; i++){

        for(int x = i - 1; x > 2; x--)

            if(i % x == 0)
                break;
            else if(x == 3 && i != 4)
                primes.add(i);
        }
    return primes;
}

当我放n = 72时,它打印好,但是没有输出2和3。我不知道为什么它继续打印。任何帮助都会很棒。如下图所示。

输出:

Prime numbers: 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 

谢谢!如果你有另一种方式,请随意扔掉,我可以借鉴。非常感谢!

5 个答案:

答案 0 :(得分:4)

您的代码解释了问题。第二个for循环将在执行之前终止,因为条件值3对于值3以下总是为false。

第一次循环运行:i = 2,x = 1,1不超过2,因此循环不运行。 第二次运行:i = 3,x = 2,2不超过2,所以再一次,同样的priblem。

答案 1 :(得分:4)

当i = 2或i = 3时,x将初始化为1或2,因此它将永远不会进入嵌套for循环(因为x> 2未实现),因此primes.add(i)将不会被执行。

提示:打印素数的更好方法2 ... N是使用筛选方法:https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

答案 2 :(得分:4)

编辑:重新评估后,我意识到你的逻辑有点过时了。代码实际上应该是:

for (int i = 2; i < n; i++){

    for(int x = 2; x <= i; x++)

        if(i == x)
            primes.add(i);
        else if(i % x == 0)
            break;
}

经过测试后,它似乎工作正常。

答案 3 :(得分:0)

当i = 2或3时,x <1。 2,内部for循环不执行。

我要将x从2开始计算:

for (int i = 2; i < n; i++){
    for(int x = 2; x <= i; x++)
        if( x == i)
          primes.add(i);
        else if (i % x == 0)
          break;
    }
return primes;

}

在iPhone上输入这个很糟糕。

答案 4 :(得分:0)

Inner for循环不会执行小于2的值。所以,你必须初始化x = 2;在内部循环。

for(int x = 2; x&lt; = i; x ++)

试试这个。