#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int a,i,m;
cin>>a;
for(i=2;i<sqrt(a);i++)
{
if(a%i==0)
break;
cout<<"not prime"<<endl;
}
if(a%i!=0)
cout<<"prime"<<endl;
return 0;
}
本人初学者编了一段代码判断输入的数是不是素数
但输出结果完全不对
以下是输出结果
输入7时
7
not prime
prime
Press any key to continue
输入4时
4
Press any key to continue
软件版本vc6.0
您好,简单修改了一下您的代码。
想要判定某个元素是否为素数,需要保证是素数、不是素数这句话只能出现一次,否则输出出来的内容会让自己感到困惑。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int a,i;
cin>>a;
// 1也不是素数。
if(a < 2){
cout<<"not prime"<<endl;
return 0;
}
// 初始化默认为素数。
int isPrime = 1;
for(i = 2; i <= int(sqrt(a)); i++){
// 可以整除,不是素数。
if(a%i == 0){
cout<<"not prime"<<endl;
isPrime = 0;
break;
}
}
// 如果是素数。
if(isPrime==1){
cout<<"is prime"<<endl;
}
return 0;
}
如果问题得以解决,请记得采纳一手~
for(i=2;i<sqrt(a);i++)
{
if(a%i==0)
break;
cout<<"not prime"<<endl;
}
if(a%i!=0)
cout<<"prime"<<endl;
你上面这段改一下
for (i = 2; i <= sqrt(a);i++)
{
if (n%i == 0) break;
}
if (i >sqrt(a)) printf("This is not a prime.");
else printf("This is a prime");
首先判断一个数是不是素数
for(i=2;i<sqrt(a);i++)这个条件有点问题,应该是循环到i<=sqrt(a)都可以。例如9如果i<sqrt(a)相当于i<3那么你就找不到3这个因数。
另外
if(a%i==0)
break;
cout<<"not prime"<<endl;
这里也有问题。你样会造成只要不能整除就会输出no prime.可能会多次输出。
我把for循环改成下面这样:仅供参考。
for(i = 2; i <= sqrt(a); i++){
if(a%i==0){//只要存在能整除的就不是质数了。
break;
}
if(i>sqrt(a)){//说明没找到整除的
cout<<"prime"<<endl;
}else{//找到了整除的
cout<<"not prime"<<endl;
}
}
对你有帮助的话,关注下我的博客呗,我会持续发技术文章。如果觉得写得还行,欢迎点赞。
您好,我是问答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632