欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PAT (Basic Level) Practice (中文)-1013-数素数 (20分)

程序员文章站 2024-03-19 08:51:04
...

题目链接
令 P​i表示第 i 个素数。现任给两个正整数 M≤N≤10​4​​ ,请输出 PM到 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

#include <iostream>
#include <queue>
using namespace std;

bool isPrime(int number)
{
    if(number==1) return 0;
    if(number==2) return 1;
    for(int i=2;i*i<=number;i++)
        if(number%i==0) return 0;//找到因子就返回false
    return 1;
}

int main(){
    int n,m;
    cin>>n>>m;
    queue<int> q;
    int t=2;
    for(int i=1;i<=m;i++){ //先找出第1个到第M个
        while(true){
            if(isPrime(t)){
                q.push(t);
                if(i<n) q.pop(); //在N之前的就删掉 最终得到[N,M]
                t++;
                break;
            }
            t++;
        }
    }
    for(int i=0;i<m-n+1;i++){
        cout<<q.front();
        q.pop();
        if(i!=m-n){ //最后没有空格 十个数一换行
            if((i+1)%10!=0) cout<<" ";
            else cout<<endl;
        }
    }
}

相关标签: PAT