PAT

B1013 数素数 (20 分)

代码长度限制 16 KB

时间限制 200 ms

内存限制 64 MB

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

输入格式:

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

输出格式:

输出从 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 <cmath>
using namespace std;

const int maxN = 10010;
int prime[maxN];

bool is_prime(int x){
    int sqt = int(sqrt(x * 1.0));
    for (int i = 2; i <= sqt; ++i) {
        if (x % i == 0)
            return false;
    }
    return true;
}

void gen_prime(){
    int cnt = 0;
    int num = 2;
    while (cnt < 10000){
        if (is_prime(num)){
            prime[cnt++] = num;
        }
        num++;
    }
}

int main() {
    gen_prime();
    int m, n;
    scanf("%d%d", &m, &n);
    for (int i = m - 1; i < n; ++i) {
        if ((i - m + 2) % 10 == 1 && (i - m + 2) > 1)
            printf("\n");
        else if (i != m - 1)
            printf(" ");
        printf("%d", prime[i]);
    }
    return 0;
}
This is just a placeholder img.