題目地址: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; }