[英]Basic Java - Finding if a number is a prime number using while loop
[英]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
是素數。
而且您不想在if
內break
; 你想要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.