输出一定范围内的素数
时间: 1ms 内存:128M
描述:
输入两个大于1的整数m和n,n大于m,输出m到n之间的所有素数(包括m和n)
输入:
两个大于1的整数m和n(n>m)
输出:
输出m和n之间的所有素数(包括m和n),每输出10个素数需要回车换行
示例输入:
2 47
示例输出:
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47
提示:
参考答案(内存最优[964]):
#include<stdio.h>
int main()
{
int m,n,i,j,c=1;
scanf("%d %d",&m,&n);
for(i=m;i<=n;i++)
{
if(i==2) {
printf( "%d ", i);
c++;
continue;
}
for(j=2;j<i;j++)
if(i%j==0)
break;
if(j==i){
printf("%d ",i);
c++;
}
if(c%11==0){//c用来统计素数的个数,从1开始每次到11就输出换行 且c重新置1
//c如果从0开始,每次重置为0时 因为0对任何数求余都是0,所以会多输出换行
printf("\n");
c=1;
}
}
printf("\n");
return 0;
}
参考答案(时间最优[0]):
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main( )
{int m,n, k, i;
int count=0; //统计素数的个数
bool prime; //定义布尔变量prime
cin>>m>>n;
for(;m<=n;m=m+1) //外循环 判别m是否为素数,m由m变化到n,增量为1
{
prime=true; //循环开始时设prime为真,即先认为m为素数
k=int(sqrt(m)); //用k代表根号m的整数部分
for(i=2; i<=k; i++) //内循环作用是将m被2到k除,检查是否能整除
if(m%i==0)//如果能整除,表示m不是素数
{
prime=false; //使prime变为假
break; //终止执行本循环
}
if (prime) //如果m为素数
{ cout<<m<<" ";
count=count+1; //count累计素数的个数
if(count%10==0) //输出10个数后换行
cout<<endl;
}
}
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。
