输出一定范围内的素数

输出一定范围内的素数

时间: 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;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注