Java 缺少素数中的2和3
输出中缺少质数2和3Java 缺少素数中的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)
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;