谁能编出此程序 谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/04 19:53:53
输入2个正整数M和N(m>=1,n<=500),统计并输出m和n之间的素数的个数以及这些素数的和,要求定义并使用函数prime(m)判断m是否为素数,当m为素数时返回1,否则返回0.

#include<iostream.h>
#include<math.h>
int prime(int m)
{
int i,k;
k=sqrt(m);
for(i=2;i<=k;i++)
{
if(m%i==0)
return 0;
else
continue;
}
if(i>k)
return 1;

}
void main()
{

int M,N;
cout<<"请分别输入M,N(1<=M,N<=500):";
cin>>M>>N;
int t=M;
M=M>N?M:N;//M存放大数
N=t<N?t:N;//N存放小数
int count=0,sum=0;
int i;
for(i=N;i<=M;i++)
{
if(prime(i))
{
count++;
sum=sum+i;
}
}
cout<<"素数共有"<<count<<"个"<<endl;
cout<<"它们的和是"<<sum<<endl;

}

关键是素数检测算法的效率,最简单的就是:
若检测n,就用小于sqrt(n)的素数相除,如果都除不能整除就是素数,否则n是合数。

#include<iostream>

using namespace std;

int prime(int m)
{
for (int i=2;i<m;i++)