給你一個正整數 N,請列出從 2 到 P 的所有質數,其中 P 為 ≤ N 的最大質數。N 的範圍為 1 到 1000。質數的定義為只能被 1 和本身除盡的大於 1 的整數。輸出中每行只能有五個數字,如範列輸出。
範例測資
範例輸入 | 範例輸出 |
---|---|
EOF 輸入,每筆測資一行,含有一個正整數 N (1 ≤ N ≤ 1000)。 | 輸出中每行最多只能有五個數字,如範列輸出。(每個數字含它前面的空白共 10 個字元) |
50 | 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 |
解題思路
使用 For迴圈 判斷 2 到 N 的質數,判斷字串的長度,先輸出「10 – 字串長度」個空白字元,然後輸出數字。
需要紀錄目前輸出的數字數量,每一次輸出數字時要 +1,當這個變數為 5 時需要換行並且將變數歸零。
每筆資料結束之後還需要換行一次。
範例程式碼-ZeroJudge A626: Prime Directive
#include <iostream>
#include <math.h>
#include <map>
using namespace std;
int current = 0;
map<int, string>MAP;
void out(string num)
{
cout << MAP[int(10 - num.length())] << num;
current++;
if (current == 5)
{
cout << "\n";
current = 0;
}
}
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
MAP[9] = " ";
MAP[8] = " ";
MAP[7] = " ";
MAP[6] = " ";
int N;
while (cin >> N)
{
current = 0;
for (int i = 2; i<=N; i++)
{
bool isPrime = true;
for (int j = 2; j<int(sqrt(i)+1); j++)
{
if (i % j == 0)
{
isPrime = false;
break;
}
}
if (isPrime)
{
out(to_string(i));
}
}
cout << "\n";
}
}
//ZeroJudge A626
//Dr. SeanXD