【PAT乙級】數素數

題目描述:

令 P​i表示第 i 個素數。現任給兩個正整數 M≤N≤10​4​,請輸出 P​M到 P​N的所有素數。

輸入格式:

輸入在一行中給出 M 和 N,其間以空格分隔。

輸出格式:

輸出從 PM到 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

解題思路:

使用相乘選出素數,去掉2,3,4…的倍數,剩下的就是素數,對選出的素數進行格式輸出。

注意:

這裏需要多選一些素數
因爲第10000個素數一定大於10000的

代碼:

#include<iostream>
using namespace std;
int a[1000001]={0};
int main() {
    int count=0;
    int m,n,i;
    for(i=2;i<500001;i++) {
        for(int j=2;i*j<1000001;j++) {
            if(a[i*j]==0) {
                a[i*j]=1;
            }
        }
    }
    cin>>m>>n;
    int ans=0;
    if(n>10000||m>10000||m>n)
        return -1;
    for(i=2;i<=1000001;i++) {
        if(a[i]==0) {
            count++;
			if(count==n) {
				cout<<i<<endl;
				break;
			}
            if(count>=m) {
            	cout<<i;
            	ans++;
            	if(ans==10) {
            		cout<<endl;
            		ans=0;
				} else {
					cout<<" ";
				}
			}
        }
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章