1. 程式人生 > >PAT乙級刷題日誌---1013(20 分) 數素數

PAT乙級刷題日誌---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相比,都是需要依次選出素數。不同的是需要一個計數器來記錄素數的個數,也依次來代表素數的位置

打卡:2018.10.21(1/5)