编写C ++算法来测试素数。我的C ++代码如下
#include<iostream>
#include<cmath>
using namespace std;
int x,n;
bool isprime(int);
int main()
{
cout<<"Enter prime no"<<endl;
cin>>x;
for (n=2;n<=floor(sqrt(x));n++)
{
if (x==1)
cout<<"not prime"<<endl;
else if (x%n==0)
cout<<"is not prime"<<endl;
else
cout<<"prime"<<endl;
}
}
但是当我运行程序时,我的输出似乎不正确,例如我继续得到&#34;是素数&#34;当答案显然不是素数时。
else if (x%n==0)
cout<<"is not prime"<<endl;
部分声明似乎无法正确执行。有人可以向我解释我的代码有什么问题。感谢
答案 0 :(得分:2)
你的循环输出&#34;素数&#34;对于x的每个非除数。你应该在第一个&#34; not prime&#34;之后终止循环。点击并且仅输出&#34; prime&#34;如果循环没有终止。
答案 1 :(得分:1)
根据Udo Klein的建议,当检测到数字不是素数时,你应该突破循环。此外,无需检查x
是否等于循环内的一个。
#include<iostream>
#include<cmath>
int main()
{
int x;
std::cout << "Enter prime no" << std::endl;
std::cin >> x;
if (x == 1)
{
std::cout << "not prime" << std::endl;
return 1;
}
for (int n = 2; n <= floor(sqrt(x)); n++)
{
if (x % n == 0)
{
std::cout << "is not prime" << std::endl;
return 1;
}
}
std::cout << "prime" << std::endl;
return 0;
}