程序给我错误的输出一些条目!怎么了?

时间:2013-12-03 16:33:09

标签: c++

所以这是代码:

#include <iostream>
using namespace std;
bool prime(int);

int main() 
{
    int x;
    cout<<"Enter your number: ";
    cin>>x;
    if(prime(x) == true)
        cout<<"Number is prime";
    if(prime(x) == false)
        cout<<"Number is not prime";
    return 0;
}
bool prime(int number)
{
    for(int i=2; i<number;i++)
    {
        if(number%i==0)
            return false;
        if(number%i!=0)
            return true;
    }
}

该程序适用于所有素数(至少对于我尝试的那些!)但对于某些复合材料,却说:数字不是素数! 我在哪里弄错了?

2 个答案:

答案 0 :(得分:4)

prime功能应如下

bool prime(int number)
{
   for(int i=2; i*i<number;i++) //Only till square root is enough.
   {
       //For any number which is divisible, return false.
       if(number%i==0)
           return false;

   }

   //Else, divisible by no one is prime.
   return true;

}

在这部分中使用其他。

if(prime(x) == true)
    cout<<"Number is prime";
else
    cout<<"Number is not prime";

无需两次调用相同的功能。

答案 1 :(得分:2)

复合材料不是Prime,所有非素数都会发出,“数字不是素数”

但是你需要修改你的代码:

bool prime(int number)
{
    for(int i=2; i<number;i++)
    {
        if(number%i==0)
            return false;
    }
    return true;
}

您只能在失败所有非主要测试后判断该数字是否为素数