1. 程式人生 > >PAT (Basic Level) Practice (中文) 1013 數素數 (20 分)(C++)

PAT (Basic Level) Practice (中文) 1013 數素數 (20 分)(C++)

1013 數素數 (20 分)

令 P​i表示第 i 個素數。現任給兩個正整數 M≤N≤104,請輸出 P​M到 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 <cstdio>
#include <cstring>
#include <cmath> int main() { int M = 0, N = 0; int cnt1 = 1, cnt2 = 0;//cnt1用來記錄素數的個數;cnt2用來完成10位換行功能 scanf("%d %d", &M, &N); if (M == 1)//把2單獨考慮,只有2既是偶數又是素數 { printf("2"); cnt2++; if (cnt1 == N) return 0; } int first = 0; for (int i = 3; cnt1 <= N; i+=2)//這裡只考慮奇數即可 { int flag =
0; for (int j = 3; j <= (int)sqrt((double)i); j += 2)//判斷是否是素數 { if (i%j == 0) { flag = 1;//非素數 break; } } if (!flag) { cnt1++; if (cnt1 >= M && cnt1 <= N)//把第M~第N個素數打印出來,並控制列印格式 { cnt2++; if (cnt2 == 1) printf("%d", i); else if (cnt2 == 10) {
printf(" %d\n", i); cnt2 = 0; } else printf(" %d", i); } } } return 0; }