编译完成后,所有数字都显示Prime。请指出任何类型的逻辑错误。
int i, num, res;
boolean flag = false;
Scanner sc = new Scanner(System.in);
System.out.println("Enter number for Prime:");
num = sc.nextInt();
for(i = 2; i <= num / 2; i++) {
res = num % 2;
if(res == 0) {
flag = false;
break;
}
else flag = true;
}
if(flag = true)
System.out.println("Prime No.");
else
System.out.println("Not a Prime No.");
答案 0 :(得分:4)
您在以下语句中使用了作业(单=
)而非比较(双==
):
if(flag = true)
将始终返回true,将其更改为
if(flag == true)
更简洁的方法就是使用
if(flag)
答案 1 :(得分:0)
在flag= true
声明中将flag == true
更改为flag
或if
尝试,
public boolean isPrimeNumber(int number){
for(int i=2; i<=number/2; i++){
if(number % i == 0){
return false;
}
}
return true;
}
答案 2 :(得分:0)
for(i = 2; i <= num / 2; i++){
res = (num % 2 || num % 3 || num & 5);
if(res == 0)
System.out.println("Prime No.");
else
System.out.println("Not a Prime No.");
}
答案是:
素数是可以被2,3和5整除的数字,因为它们是LCD,它将证明如果任何数字除以它们并且仍有余数则是复合数字!
答案 3 :(得分:0)
你的部分问题是你没有测试素数,你正在测试甚至。
if(flag),而不是if(flag = true)
你需要测试类似的东西(而不是for循环):
if(num % 2 == 0 ||
num % 3 == 0 ||
num % 5 == 0 ||
num % 7 == 0 ||
num % 11 == 0)
{
flag=false;
}
else
{
flag=true;
}
素数有很大的列表。 [在2-1,000中有168个]
为了提高效率,我建议使用5组。这可以通过减少检查来加快代码速度。
if(!flag && num > 12) // num being 1 less than the next prime to be checked.
{
if(num % 13 == 0 ||
num % 17 == 0 ||
num % 19 == 0 ||
num % 23 == 0 ||
num % 29 == 0)
{
flag=false;
}
else
{
flag=true;
}
您可以创建素数数组,并使用循环遍历数组,直到A)您找到真实结果,或2)可能的素数大于要检查的数字。 [我没有写那种方法]