簡體   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