[英]how to do a program that determines if a number is prime or composite
我是使用 Java 的初学者。 出于某种原因,我无法让我的程序正确确定我输入的数字是质数还是合数。 有人可以告诉我我做错了什么吗?
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
boolean prime = true;
System.out.println("Please enter a number");
int num1 = in .nextInt();
int numval = 1;
for (int i = 2; i < num1; i = i + 1) {
numval += 1;
int test = num1;
}
if (num1 != 0) {
System.out.println("This is a prime number");
prime = false;
}
if (prime == true) {
System.out.println("This is not a prime number");
}
}
我不确定你想用 test 变量做什么,但试试这样更干净的东西。
boolean prime = true;
int num1 = in .nextInt();
// We know that composite numbers start from 2 and that 1 is neither prime nor composite.
if (num1 < 2) {
throw new IllegalArgumentException("Number has to greater than 1");
}
for (int i = 2; i < num1; i++) {
if (num % i == 0) {
prime = false;
break;
}
}
if (prime) {
System.out.print("Number is a prime");
} else {
System.out.print("Number is composite");
}
质数是只有 1 和它本身两个因数的数。 所以你必须检查它是否有任何大于 1 且小于 N 的因数。出于这个原因,你必须编写一个从2 到 N-1的循环来检查是否可以除以从2 到任何数字N-1 。
如果可以从循环中得到任何因子,则将变量prime
设为假并退出循环,因为如果我们从循环中得到一个因子,则无需检查其他因子。
如果我们没有从循环中得到任何因子,那么prime
的值将是我们之前初始化的真值。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
boolean prime = true;
System.out.println("Please enter a number");
int num1 = in .nextInt();
if(num1<2)
{
System.out.println("Number should be greater than 1");
return;
}
for (int i = 2; i < num1; i = i + 1) {
if (num1 % i == 0) {
prime = false;
break;
}
}
if (prime == true) {
System.out.println("This is a prime number");
}
if (prime == false) {
System.out.println("This is not a prime number");
}
}
boolean prime = true;
for (int i = 2; i * i <= num1; i = i + 1) {
if (num1 % i == 0) {
prime= false;
break;
}
}
if (prime && num1>1) {
System.out.println("This is a prime number");
}else {
System.out.println("This is not a prime number");
}
我知道两种方法:让我们记住使用“数字”。
1: ((数字 % 2) == 0)
2: ((数字 & 1) == 0)
我相信这对于任何素数都会返回 true 否则会返回 false 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.