1. 程式人生 > >PAT 1013 數素數

PAT 1013 數素數

令Pi表示第i個素數。現任給兩個正整數M <= N <= 104,請輸出PM到PN的所有素數。

輸入格式:

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

輸出格式:

輸出從PM到PN的所有素數,每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 <vector>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>

using namespace std;

/* 判斷一個數是不是素數 */
bool isPrimeNum(const int num)
{
    if(num == 2)
    {
        return true;
    }

    int len = (int)sqrt(num);
    int i = 0;

    for(i = 2; i <= len; i++)
    {
        if(num % i == 0)
        {
            return false;
        }
    }

    return true;
}

int main()
{
    int M = 0, N = 0;
    int num = 2, cnts = 0;
    vector<int> vecPrimer;
    int i = 0;

    cin >> M >> N;
    while(cnts < N)
    {
        /* 判讀是不是素數 */
        if (isPrimeNum(num) == true)
        {
             vecPrimer.push_back(num);
             cnts++;
        }
        num++;
    }

    /* 輸出滿足的資料 */
    cnts = 0;
    for(i = M; i <= N; i++)
    {
        if(cnts == 0)
        {
            cout << vecPrimer[i-1];
        }
        else
        {
            cout << " " << vecPrimer[i-1];
        }

        if(cnts == 9)
        {
            cout << endl;
            cnts = 0;
        }
        else
        {
            cnts++;
        }

    }
    return 0;
}