C++输出m与n之间的素数的个数以及这些素数的和

2024-11-26 16:25:16
推荐回答(2个)
回答1:

#include //启用断言
#include //需要数学函数支持
#include //C++/io操作

class IPrime //支持检测素数的算法改进
{
public:
virtual bool isPrime(unsigned int)=0;
};

class SPrime:public IPrime//一种检测n是不是素数的算法
{
public:
bool isPrime(unsigned int n)
{
if(n<2)
return false;
unsigned int ncount=(unsigned int)sqrt(n);
for(unsigned int i=2;i<=ncount;i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}
};

int printPrime(unsigned int m,unsigned int n,int& sum)//sum 是out参数
{

assert(n>=m); //前置条件判断 n
sum=0; //out 参数置零

IPrime& in=SPrime(); //选择一种判断prime的算法

int ncnt=0; //统计素数个数
for(unsigned int i=m;i<=n;i++) //区间[m,n]之间遍历,如果检测到素数就输出
{
if(in.isPrime(i))
{
++ncnt;
sum+=i;
cout<
if(ncnt%5==0)
cout< }
}

return ncnt;}
//测试
void main()
{
unsigned int n=0,m=0;
cout<<"输入m,n. m和n之间用空格隔开,键入ENTER结束输入"< cin>>m>>n;
int ncnt,sum;
cout<<"========================="< ncnt=printPrime(m,n,sum);
cout<<"\n========================="< cout<<"素数个数="< cout<<"素数总和="<
}

回答2:

楼主你好
具体代码如下:
#include
int prime(int n)
{
int i;
for(i=2;i<=n/2;i++)
if(n%i==0)
return 0;
if(i>=n/2)
return 1;
}

int main()
{
int m,n;
int i;
int count=0;//素数个数
int sum=0;//素数之和

printf("请输入m,n:"); scanf("%d %d",&m,&n);
for(i=m;i<=n;i++)
{
if(prime(i))
{
count++;
sum+=i;
}
}

printf("%d~%d之间的素数个数为:%d 素数之和为:%d\n",m,n,count,sum);
return 0;
}

希望能帮助你哈