1013 數素數 (20分)
題目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805309963354112
令\(P_i\) 表示第 i 個素數,現任給兩個正整數 M≤N≤\(10^4\),請輸出 \(P_M\) 到 \(P_N\) 的所有素數,
輸入格式:
輸入在一行中給出 M 和 N,其間以空格分隔,
輸出格式:
輸出從 \(P_M\) 到 \(P_N\) 的所有素數,每 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
我的理解
是輸出第m到n個素數,而不是輸出m到n之間的素數,
代碼段
#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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/103920.html
標籤:其他
上一篇:指定源組播編程
下一篇:遠程控制硬體用什么服務器好
