PAT乙级1013
Posted another-7
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT乙级1013相关的知识,希望对你有一定的参考价值。
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;
}
以上是关于PAT乙级1013的主要内容,如果未能解决你的问题,请参考以下文章