简体   繁体   English

编写确定素数的程序

[英]Writing a program that determines a prime number

I'm trying to write a program that asks the user to enter a number, then I need to create a method called isPrime to create the calculation and print out the result in main. 我正在尝试编写一个要求用户输入数字的程序,然后需要创建一个名为isPrime的方法来创建计算并在main中打印出结果。 I'm sure it's something small that I'm missing, but I can't get it to produce an accurate result. 我确定这是我所缺少的小东西,但是我无法获得准确的结果。

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

Use an if and else (don't retest your boolean condition in the first case). 使用ifelse (在第一种情况下,请勿重新测试布尔条件)。 And don't test for == true in an if . 并且不要在if测试== true This 这个

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

Should just be 应该只是

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

or even something like 甚至

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

If you want to put the braces on their own lines go ahead. 如果您想将括号放在自己的行上,请继续。 As for your isPrime method; 至于您的isPrime方法; you have your return conditions reversed (and the test as well). 您的退货条件发生了逆转(测试也是如此)。 Also we can optimize it a bit. 我们也可以对其进行优化。 Unroll the first even test, because then we can skip every other element. 展开第一个偶数测试,因为这样我们就可以跳过所有其他元素。 Also we only need to test to the square root of the input number. 同样,我们只需要测试输入数字的平方根即可。 Like, 喜欢,

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

You should change your "if (num%i!=0)" condition to if(num % i == 0) 您应该将“ if(num%i!= 0)”条件更改为if(num%i == 0)

See the following code: 请参见以下代码:

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.");
}
}

The isPrime(int num) method may need to check if num % i == 0 instead of if num % i != 0 because many non-prime numbers will pass the condition and return true. isPrime(int num)方法可能需要检查num % i == 0而不是num % i != 0因为许多非质数会通过该条件并返回true。

As an example, if isPrime(9) is called, the conditional will check if 9 % 2 != 0, which is true, and the method will say that 9 is prime when it's not. 例如,如果调用isPrime(9) ,则条件isPrime(9)将检查9%2!= 0是否为真,并且该方法将说9为素数。

As a result, you could try changing the method to something like this: 结果,您可以尝试将方法更改为如下所示:

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