有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

显示素数误报的java程序

编译后,所有数字都显示素数。请指出任何类型的逻辑错误

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) 个答案

  1. # 1 楼答案

    if语句中将flag= true更改为flag == trueflag

    试试看

    public boolean isPrimeNumber(int number){
       for(int i=2; i<=number/2; i++){
            if(number % i == 0){
                return false;
            }
        }
        return true;
    }
    
  2. # 2 楼答案

    你的部分问题是,你不是在测试素数,而是在测试偶数

    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-1000中有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作为列表

  3. # 3 楼答案

    在以下语句中使用赋值(单=)而不是比较(双==):

    if(flag  = true)
    

    它将始终返回真值,将其更改为

    if(flag  == true)
    

    更简洁的方法是简单地使用

    if(flag)
    
  4. # 4 楼答案

    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,可以证明如果任何一个数被它们整除,并且还有余数,那么它就是一个复合数