编写确定素数的程序

时间:2018-11-04 04:00:32

标签: java

我正在尝试编写一个要求用户输入数字的程序,然后我需要创建一个名为isPrime的方法来创建计算并在main中打印出结果。我确定这是我所缺少的小东西,但是我无法获得准确的结果。

public static void main(String[] args) {
    System.out.print("Enter number: ");
    int num = s.nextInt();

    if (isPrime(num) == true) {
        System.out.println("Number is prime");
    } else if (isPrime(num) == false) {
        System.out.println("Number is not prime");
    }    
}  

public static boolean isPrime(int num){
    for(int i = 2; i <= num/2; i++) {
        if (num%i != 0) {
            return true;
        }
    }
    return false;
}

3 个答案:

答案 0 :(得分:2)

使用ifelse(在第一种情况下,请勿重新测试布尔条件)。并且不要在== true中测试if。这个

if(isPrime(num) == true)
{
    System.out.println("Number is prime");
}
else if(isPrime(num) == false)
{
    System.out.println("Number is not prime");
}

应该是

if (isPrime(num)) {
    System.out.println("Number is prime");
} else {
    System.out.pritnln("Number is not prime");
}

甚至类似

System.out.print("Number is ");
if (!isPrime(num)) {
    System.out.print("not ");
}
System.out.println("prime");

如果您想将大括号放在自己的行上,请继续。至于您的isPrime方法;您的退货条件发生了逆转(测试也是如此)。我们也可以对其进行优化。展开第一个偶数测试,因为这样我们就可以跳过所有其他元素。同样,我们只需要测试输入数字的平方根即可。喜欢,

public static boolean isPrime(int num) {
    if (num == 2) {
        return true; // two is prime.
    }
    if (num < 1 || num % 2 == 0) {
        return false; // all other even numbers are not prime.
    }
    for(int i = 3; i <= Math.sqrt(num); i += 2) {
        if (num % i == 0) {
            return false;
        }
     }
     return true;
}

答案 1 :(得分:0)

您应将“ if(num%i!= 0)”条件更改为if(num%i == 0)

请参见以下代码:

public class Prime {

public static void main(String[] args) {

    int num = 29;
    boolean flag = false;
    for(int i = 2; i <= num/2; ++i)
    {
        // condition for nonprime number
        if(num % i == 0)
        {
            flag = true;
            break;
        }
    }

    if (!flag)
        System.out.println(num + " is a prime number.");
    else
        System.out.println(num + " is not a prime number.");
}
}

答案 2 :(得分:0)

isPrime(int num)方法可能需要检查是否num % i == 0而不是num % i != 0,因为许多非质数会通过条件并返回true。

例如,如果调用isPrime(9),则条件语句将检查9%2!= 0是否为真,并且该方法将在9不为9时表示质数。

因此,您可以尝试将方法更改为如下所示:

public static boolean isPrime(int num)
{
    for(int i = 2; i <= num/2; i++)
    {
        if (num%i==0)
        {
         return false;
        }

    }
    return true;
}