public class FindPrimes {
public static void main(String[] args) {
int Number_of_prime = 50;
int number_of_final = 10;
int count = 0;
int number = 2;
boolean isPrime = true;
while (count < Number_of_prime) {
for (int divisor = 2; divisor <= number / 2; divisor++) {
if (number % divisor == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
count++;
if (count % number_of_final == 0)
System.out.println(number);
else
System.out.print(number + " ");
}
number++;
}
}
}
该程序应找到前50个素数。当我在boolean isPrime
循环之外声明while
时(上面的例子)我只获得素数2和3,但当我在boolean isPrime
循环中声明while
时,我得到所有50个素数。
为什么会这样?
答案 0 :(得分:1)
我假设你得到了正确的答案,但你不确定它是怎么回事。
在isPrime
之外声明while
不起作用。为什么?因为如果你在循环中没有找到素数,你可以将isPrime
设置为false
...并且永远不会再将它重置回true
。因此,在非素数之后的任何后续数字将自动默认为非素数。
在isPrime
内声明while
有效。为什么?因为每当您找到素数或非素数时,您都会将isPrime
重置回其原始值,并且每个后续数字都可以并且将相应地评估其质数。
如果您仍然无法理解,请尝试将其绘制出来。
希望有所帮助。