所以这是代码:
#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;
}
}
该程序适用于所有素数(至少对于我尝试的那些!)但对于某些复合材料,却说:数字不是素数! 我在哪里弄错了?
答案 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;
}
您只能在失败所有非主要测试后判断该数字是否为素数