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

输入2个正整数m和n(m>=1,n<=500),统计并输出m和n之间的素数的个数以及这些素数的和。素数就是只能被1和自身整除的正整数,最小的素数是2。要求定义并调用函数prime(m)判断m是否为素数,当m为素数时返回1,否则返回0.

#include<assert.h> //启用断言
#include<math.h> //需要数学函数支持
#include<iostream.h> //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<m,会abort()程序

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<<i<<" ";

if(ncnt%5==0)
cout<<endl;
}
}

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

}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-04-23
楼主你好
具体代码如下:
#include<stdio.h>
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;
}

希望能帮助你哈本回答被提问者和网友采纳

C++,求m到n之间所以素数的和,用for怎么写啊,始终搞不清楚其中的关系...
for (i=m;i<=n;i++)if (sushu(i))s+=i;解释:s用来存储和,sushu()用来判断i是否素数,如果是就加到s中。

用c++语言编一个 能在m~n范围内求出素数的个数 的程序 例如输入2 5...
int m,n,i,j,k;scanf("%d %d",&m,&n);for(i=m;i<=n;i++){ if(i==2) { \/\/如果是2, 直接输出。printf( "%d ", i);continue;} for(j=2;j<i;j++) \/\/应该是j

C++编程 输入m和n,输出m到n间的所有素数
include <iostream> using namespace std;bool isPrime(int n){ for (int i=2; i<n; i++){ if (n%i==0)return false;} return true;}int main(){ int m,n;cin>>m>>n;for (int i=m; i<=n; i++){ if (isPrime(i)){ cout<<i<<endl;} } return 0;} ...

C++编写函数求n~m内所有素数的个数及其均值?
cout<<k<<"个素数"<<endl;cout<<"average="<<sum<<endl;return 0;}

用C++输出两个正整数[m,n]之间所有的素数,每行输出5个数
main(){ int i,j,m,n,k,h=0,leap=1;loop:printf("\\nPlease input two numbers m and n:(m>1,n>m)\\n");scanf("%d%d",&m,&n);if(m<=1||n<=m){ printf("Input error! Please input again!");goto loop;} printf("\\The prime numbers between %d and %d are:\\n",m,n...

c++ 求输入m和n,输出m到n间的所有素数。
include<iostream> using namespace std;int main(){ int i,j,m,n;cin>>m>>n; \/\/假定m<=n 且m>1 因为1既不是素数也不是合数 for(i=m;i<=n;i++){ for(j=2;j<=i\/2;j++)if(i%j == 0) break;if(j>i\/2) cout<<i<<endl;} \/\/return 1;system("pause");} ...

C++:找出两个正整数m和n之间所有的绝对素数(m和n在1000以内,要求每行...
false; return true;}int main(void){ int m,n,i,sum;char a[11];while(1){cout << "Enter m & n(0<m<=n<=1000)...\\n";cin >> m >> n;if(m>0 && m<=n && n<=1000) break;cout << "Error, redo: ";}cout << "They are as following:\\n";for(i=m+!

输入两个正整数m和n,统计并输出m和n之间的素数的个数
include <stdio.h>int prime(int m){ int i; for(i = 2; i <= m \/ 2; i++) if(m % i == 0) return 0; return 1;}int main(void){ int i, m, n, c=0, s=0; printf("Input m:"); scanf("%d", &m); printf("Input n:"); ...

C语言程序题,判断m-n之间的素数有几个、分别是哪些。m-n范围可以任意指...
a=b;b=t; } for(k=a;k<=b;k++) { n=1; for(m=2;m<=k-1;m++) if(k%m==0) {n=0;} if(n==1&&k!=1) { printf("分别是:%d ",k); c++; } } printf("共 %d 个",c); printf("\\n"); }自己试试~

用c++编译 输出[m,n]间所有素数,并且每5个换行,如果区间内不存在素数...
void prime(int a,int b) \/\/输出素数的函数 { int i;int n = int(sqrt(a));for(i = 2;i <= n;i++) \/\/只要2~根号a的数都不被a整除,就是素数 { if(a%i == 0)break;} if(i > n)cout<<a<<" ";a++;if(a > b)exit(0); \/\/到达b后退出函数 prime(a,b)...

相似回答