![](/img/trans.png)
[英]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.