我错过了输出中的素数,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
谢谢!如果你有另一种方式,请随意扔掉,我可以借鉴。非常感谢!
答案 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 ++)
试试这个。