Java 缺少素数中的2和3

Java 缺少素数中的2和3,java,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)

输出中缺少质数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;
}

谢谢!如果你有其他的方法,请随意扔掉,我可以从中学习。非常感谢

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

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

当i=2或i=3时,x将初始化为1或2,因此它将永远不会进入嵌套for循环,因为x>2未满足,因此primes.addi将不会执行


提示:打印素数2…N的更好方法是使用筛选方法:

编辑:重新评估后,我发现您的逻辑自始至终都有点不正确。代码实际上应该是:

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;
}

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

当i=2或3时,x<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上输入这个很糟糕

内部for循环不会执行小于2的值。因此,必须初始化x=2;在内部for循环中


forint x=2;x有趣。。。因此,我必须用其他内容替换2?是的,请参见上文,您将要用0替换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;