c++判断素数问题求解

#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