PAT乙級1013

1013 數素數 (20分)

題目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805309963354112ios

\(P_i\) 表示第 i 個素數。現任給兩個正整數 M≤N≤\(10^4\),請輸出 \(P_M\)\(P_N\) 的全部素數。spa

輸入格式:

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

輸出格式:

輸出從 \(P_M\)\(P_N\) 的全部素數,每 10 個數字佔 1 行,其間以空格分隔,但行末不得有多餘空格。orm

輸入樣例

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

個人理解

是輸出第m到n個素數,而不是輸出m到n之間的素數。ip

代碼段

#include <iostream>
#include <iomanip>
#include <math.h>
#include <stdlib.h>

using namespace std;
// 判斷x是否爲素數
bool isPrime(int x);

int main() {
    int m, n;
    int format = 0;
    int counter = 0;
    cin >> m >> n;
    // 輸出從1到無窮 第m到n個素數
    // 質數又稱素數。指整數在一個大於1的天然數中,除了1和此整數自身外,無法被其餘天然數整除的數。
    // 換句話說,只有兩個正因數(1和本身)的天然數即爲素數。
    // 比1大但不是素數的數稱爲合數。1和0既非素數也非合數。
    for (int i = 2; counter <= n; ++i) {
        if (isPrime(i)) {
            counter++;
            if (counter >= m && counter <= n) {
                if (format == 9) {
                    cout << i << endl;
                    format = 0;
                } else {
                    if (counter == n) {
                        cout << i;
                    } else {
                        cout << i << " ";
                    }
                    format++;
                }
            }
        }
    }
    return 0;
}

bool isPrime(int x) {
    if (x == 2 || x == 3) {
        return true;
    }
    int limit = (int) sqrt(x);
    int i;
    for (i = 2; i <= limit; ++i) {
        if (x % i == 0) {
            break;
        }
    }
    return i > limit;
}
相關文章
相關標籤/搜索