繁体   English   中英

编写确定素数的程序

[英]Writing a program that determines a prime number

我正在尝试编写一个要求用户输入数字的程序,然后需要创建一个名为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;
}

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

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;
}

您应该将“ 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.");
}
}

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

例如,如果调用isPrime(9) ,则条件isPrime(9)将检查9%2!= 0是否为真,并且该方法将说9为素数。

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

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

    }
    return true;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM