簡體   English   中英

在java中使用while循環查找素數

[英]find prime number using while loop in java

我想找到質數。 它將n除以2(n–1)之間的所有數字,但在某處是錯誤的。 例如9 ,它給出true

感謝任何幫助。

public void isPrime(int n) {

    int i = 2;
    while (i <= (n - 1)) {
        if (n % i == 0) {
            System.out.println("It's not a prime number");
            break;
        } else {
            System.out.println("It's a prime number");
            break;
        }
        i++;
    }
}

語句i++無法訪問,因此您不希望else{...}包含break 相反,您只需要else i++

您想要“是素數”語句的位置在循環之外,因為在循環完成檢查所有除數之前您不知道n是素數。

而且您不想在ifbreak 你想要return ,否則它會打印“是素數”。

PS你可以讓while說while(i < Math.sqrt(n))來減少迭代(想想看)。

編輯

您可能希望將返回類型設為boolean而不是打印消息,如果有除數則return false如果沒有除數則return true

如果您的數字是素數,此方法將返回一個布爾值。 在 for 循環中,您可以看到我們首先測試 2。如果我們的數字不能被 2 整除,那么我們不必測試任何偶數。 這是測試質數的一種非常有效的方法。

   boolean isPrime(int n) {
    for(int i=2;2*i<n;i++) {
        if(n%i==0)
            return false;
    }
    return true;
}

這是素數的代碼,

import java.util.Scanner;

public class JavaPrimeNumber 
{
   public static void main(String[] args) 
   { 
      boolean checkPrime = true;
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter any number find prime number in java : "); 
      int number = sc.nextInt();

      int a = 2;
      while(a <= number / 2)
      {
         if(number % a == 0)
         {
            checkPrime = false;
            break;
         }
         a++;
      }

      if(checkPrime)
         System.out.println(number + " is a prime number.");
      else
         System.out.println(number + " is not a prime number.");
      sc.close();
   }
}

問題是您在第一次檢查時跳出了循環:您除以 2 並僅根據該結果報告答案。

重組您的循環,以便“這是一個質數”的決定被延遲,直到您完全通過循環。 您可能想為此設置一個布爾變量。

另外,我建議使用 for 循環,因為您知道迭代的最大次數。 請注意,您不必轉到 n-1,只需轉到 sqrt(n)。

public void isPrime(int n) {
    if(n % 2 == 0) {
       System.out.println("It is not a prime number");
       return;
    }   
    else {
       int i = 3;
       while(i <= Math.sqrt(n) ) {
           if( (n % i) == 0) {
              System.out.println("It is not a prime number");
              return;
           }
           i = i + 2; 
       }
    }
    System.out.println("It is a prime number");
    return;

}

您可以通過這種方式執行 while 循環,首先您要檢查 no 是否可以被 2 整除,如果是,則它不是素數。 如果不檢查奇數直到 n 的平方根。 不需要檢查偶數,如果 no 不能被 2 整除,它就不能被任何偶數整除。

//import java.util.*;
import java.util.Scanner;
class Primenos
{   public static void main(String args[])
    {   int no, flag = 0, a, b;
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter any no: ");
        no = sc.nextInt();
        a=1;
        while(a<=no)
        {
            flag=0;
            b=2;
            while(b<=a>>1)
            {
                if(a%b==0)
                {   flag = 1;
                    break;
                }
                b++;
            }
            if(flag==0)
            {   System.out.println("Prime number" + a);
            }
            else
            {   System.out.println("Not Prime number" + a);
            }
            a++;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM