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

时间:2017-12-25 03:06:18

标签: 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");
        }
    }
}

4 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:1)

在您的代码中

for(int divisor = 2; divisor < num / 2; divisor++) {
    if(num % divisor == 0)
    {

        isPrime = false;
    }
    isPrime = true;
}

如果isPrime = false,那么你再次将其设为true!

你可以考虑这个:

    isPrime = true;
    for(int divisor = 2; divisor < num / 2; divisor++) {
        if(num % divisor == 0)
        {
            isPrime = false;
            break;
        }
    }

答案 2 :(得分:-1)

试试这个:

public class prime{
public static void main (String args[]){
int n1=100, n2=1000;
int c=0;
for(int i=n1; i<=n2; i++)
    if(isPrime(i)==true)
        c++;
    System.out.print(c);
}
public static boolean isPrime(int number)
{

    for(int j=2; j<number; j++) //u go from number+1 to number to check 
                                //if it can be divided by any other value.
        if(number % j ==0) //if there is 1 other number that divides it then
                           //it returns false.
            return false;

        return true; //else it returns true.
}
}

答案 3 :(得分:-2)

公共类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 number ( you think ) : ");
    String ch = input.next();

    if (isNumeric(ch)) {
        int num = Integer.parseInt(ch);
        isPrime = true;
        if (num > 1) {
            for (int divisor = 2; divisor * divisor <= num; divisor++) {
                if (num % divisor == 0) {
                    isPrime = false;
                    break;
                }
            }
        } else {
            isPrime = false;
        }

        if (isPrime) {
            System.out.println("Prime");

        } else {
            System.out.println("Not a prime");
        }
    } else {
        System.out.println("Should input a number");
    }
}

public static boolean isNumeric(String str) {
    Pattern pattern = Pattern.compile("[0-9]*|\\-[0-9]*");
    Matcher isNum = pattern.matcher(str);
    if (!isNum.matches()) {
        return false;
    }
    return true;
}

}