检查java中的数字是否为素数

XIA*_* LI -2 java primes

这个问题是检查数字是否为素数,当然已经有不同的答案了.但是我整天都在努力,我找不到为什么我的方法不能正常工作.

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)

Mur*_*nik 6

这里的主要问题是你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)

  • 只需停在`divisor <=(int)Math.sqrt(num)` (2认同)