C ++检测数字是否为素数

时间:2014-09-15 07:04:46

标签: c++

我无法编译为什么这段代码无效的原因。我是C ++的新手,有人可以帮忙吗? 我收到了错误:"警告:控制可能到达结束       非空函数[-Wreturn-type]"

该功能无法正常工作 (我需要调用一个布尔函数)

bool isprime(int num) {

    if (num == 2)
    return true;


    else if (num%2 == 0)
        return false;
}

int main()
 {

     int num,count=0;
     cout<<"Enter a number greater than 1 and less than 100: ";
     cin>>num;

          if (num<=1){
              cout<<"Oh nooooooooo, " << num << " is too small :(\n";
                return 0;
               }

          if (num>=100){
              cout<<"Oh nooooooooo, " << num << " is too large :(\n";
                return 0;
               }

            if  (isprime(num) == true) { 

           cout << "True " << num <<" is a prime number\n";   }

             else if (isprime(num) == false)  { 

             cout << "False " << num <<" is not a prime number\n";  }


return 0;
}

4 个答案:

答案 0 :(得分:3)

您的代码的主要问题是您不能处理isprime()函数中的所有可能情况。有1到100之间的数字未被评估:3,5,7和所有其他奇数。

- &GT;从语法上讲,问题是对于这些输入,函数中没有return语句。

- &GT;从语义上讲,您的函数不会计算这些数字是否为素数。有关计算素数的概念上相当简单的算法,请参阅http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

答案 1 :(得分:1)

代码完全错误。这不会检查素数。我建议你阅读一本数学书籍,它甚至在尝试编写代码来检查素数之前,详细描述素数及其属性。你的功能是检查数字是否是奇数。奇数不一定是素数,例如数字9,这不是素数但你的代码定义它。

答案 2 :(得分:-2)

错误意味着它可能会在没有返回任何内容的情况下到达函数的末尾。

只需删除else if并让它返回false。

答案 3 :(得分:-4)

你对isprime的逻辑是不可靠的。所有偶数都是素数,即if(x%2 == 0)返回(true); 在循环测试中所有奇数3向上

if(x%odd == 0)return(true); 否则if(odd&gt; = x)返回(false);

这不是一种有效的方法,但它会起作用。