这个问题是检查数字是否为素数,当然已经有不同的答案了.但是我整天都在努力,我找不到为什么我的方法不能正常工作.
public class PrimeNum
{
private static boolean isPrime;
private static Scanner input;
public static void main(String[] args)
{
input = new Scanner(System.in);
System.out.println("Enter a prime number ( you think ) : ");
int num = input.nextInt();
isPrime = false;
for(int divisor = 2; divisor < num / 2; divisor++) {
if(num % divisor == 0)
{
isPrime = false;
}
isPrime = true;
}
if(isPrime)
{
System.out.println("Prime");
}
else
{
System.out.println("Not a prime");
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里的主要问题是你isPrime在每次迭代中都会覆盖它的值,所以如果你检查的最后一个除数不分num,你就把它解释为素数.
一个更好的方法是假设一个数字是一个素数,直到证明不然(即,直到你找到它的除数).一旦你找到了这样一个除数,你就可以break摆脱循环 - 数字不是素数,而且没有理由继续检查它:
isPrime = true;
for(int divisor = 2; divisor <= num / 2; divisor++) {
if (num % divisor == 0) {
isPrime = false;
break; // num is not a prime, no reason to continue checking
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15110 次 |
| 最近记录: |