程序显示Prime数的误报

时间:2014-07-13 12:40:08

标签: java numbers

编译完成后,所有数字都显示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.");

4 个答案:

答案 0 :(得分:4)

您在以下语句中使用了作业(单=)而非比较(双==):

if(flag  = true)

将始终返回true,将其更改为

if(flag  == true)

更简洁的方法就是使用

if(flag)

答案 1 :(得分:0)

flag= true声明中将flag == true更改为flagif

尝试,

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)可能的素数大于要检查的数字。 [我没有写那种方法]

我使用:http://www.factmonster.com/math/numbers/prime.html作为列表。