PAT Basic(乙级)---1013(20 分) 数素数

令 P​i​​ 表示第 i 个素数。现任给两个正整数 M≤N≤10​4​​,请输出 P​M​​ 到 P​N​​ 的所有素数。

输入格式:

输入在一行中给出 M 和 N,其间以空格分隔。

输出格式:

输出从 P​M​​ 到 P​N​​ 的所有素数,每 10 个数字占 1 行,其间以空格分隔,但行末不得有多余空格。

输入样例:

5 27

输出样例:

11 13 17 19 23 29 31 37 41 43

47 53 59 61 67 71 73 79 83 89

97 101 103


思路:

  • 判断素数1007里知道的简单方法:判断k是否为素数只需要除到根号k就行了。
  • 一个计数器记录是第几个素数

 

 代码:

#include <iostream>
#include <math.h>
using namespace std;

int main(){
  int M,N;
  cin >> M >> N;
  if(N<M) return 0;
  
  int i,j,temp,count;
  j=2;
  count=0; //计数器 
  temp =0;
  while(count!=N){
  	 temp=sqrt(j);
  	 for(i=2;i<=temp;i++){
  	 	if(j%i==0) break;
  	 }
  	 //判断是否为素数 
  	 if(i>=temp+1){
  	 	count++;
  	 	//判断是否是范围内的素数 
  	 	if(count>=M && count <=N){
  	 		//10个数换行
			if((count-M+1)%10==0){
				cout << j << endl;
			} else{
				//是否为最后一个数 
				if(count==N) cout << j; 
				else cout << j << " ";
			}
  	 	}
  	 }
  	 j++;
  }
}

总结:

  • 和1007相比,都是需要依次选出素数。不同的是需要一个计数器来记录素数的个数,也依次来代表素数的位置

 

猜你喜欢

转载自blog.csdn.net/weixin_38854519/article/details/83240677