我是使用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");
}
}
答案 0 :(得分:0)
我不确定您尝试使用测试变量做什么,但尝试这样更清洁的事情。
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 :(得分:0)
素数是只有两个因子为1的数字。因此,您必须检查是否有任何大于1且小于N的因子。因此,您必须编写一个从 2到N-1 的循环来检查是否可以除以 2到N-1 之间的任何数字。
如果可以从循环中获取任何因子,则将变量prime
设为false并从循环中断,因为如果我们从循环中得到一个因子,则不必检查其他因子。
如果我们没有从循环中得到任何因子,那么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");
}
}
答案 2 :(得分:0)
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");
}
答案 3 :(得分:-1)
我知道两种方式: 让我们记住数字&#39;使用。
1:((编号%2)== 0)
2:((数字&amp; 1)== 0)
我相信,对于任何素数都会返回true,否则会返回false。