【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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章