给定三个数字作为输入,如果其中至少有一个是素数,则返回true

时间:2015-11-04 02:15:15

标签: java if-statement for-loop primes

  

给定三个数字作为输入,如果其中至少有一个是素数,则返回true。要解决此问题,请定义一个检查数字是否为素数的函数并使用该函数

MyApproach:

我创建了一个函数,首先检查num是否为prime(CHECK PRIME)。检查3个数字后,如果在该函数中任何一个数字是素数,它应该返回true 否则是假的。

  

但我对测试用例的错误是

以下是我的代码:

public boolean anyonePrime(int num1, int num2, int num3)
{    
    boolean b1=checkPrime(num1);
    boolean b2=checkPrime(num2);
    boolean b3=checkPrime(num3);
    if((b1==true) ||(b2==true) ||(b3==true))  //@Edit
    return true;
    else 
    return false;
}    
public boolean checkPrime(int num)
{
    boolean b0=true;
    if(num==1)
        return false;  //@Edit
    else
    {
        for(int i=2; i<=num/2; i++)
        { 
            if(num % i==0)
            { 
                return false;   //@Edit
            }
        }
        return true;
    } 

    if(b0==true)
        return true;
    else 
        return false;
    //write your code here
    }   
}

@ Edit传递所有测试用例 对于输入

Parameters          ActualOutput    Expected Output     
'169' '361' '529'   true            false

3 个答案:

答案 0 :(得分:3)

您的代码中似乎有拼写错误。您在检查b0=true;之前设置了if(b0==true);,因此它将始终返回true。一件简单的事情就是在任何支票发现它不是素数时立即返回false,而不是将b0设置为false然后继续做更​​多工作。

答案 1 :(得分:3)

主要问题是始终b0=true。但..

  • 它也是相当低效的,因为如果第一个是素数,你不会立即停止,
  • 如果有除数,也不会立即停止,
  • 当你到达num
  • 的平方根时也不会停止
  • b3 = true,应为b3 == true。

答案 2 :(得分:2)

试试这个:

public boolean anyonePrime(int num1, int num2, int num3)
{    
   return (checkPrime(num1) || checkPrime(num2) || checkPrime(num3))
}    
    public boolean checkPrime(int num)
    {
     boolean b0=true;
     if(num==1)
     b0=false;
     else
     {
      for(int i=2; i<=num/2; i++)
      { 
        if(num % i == 0)
        { 
            b0=false;
        }

      }
     } 
       if(b0==true)
       return true;
       else 
       return false;
    //write your code here

    }   
}

我刚删除了&#39; b0 = true行&#39;并整理了一些代码