码迷,mamicode.com
首页 > 其他好文 > 详细

PAT乙级1013

时间:2020-01-18 21:08:52      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:tps   pac   for   除了   count   cout   地址   ++   lin   

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

标签:tps   pac   for   除了   count   cout   地址   ++   lin   

原文地址:https://www.cnblogs.com/another-7/p/12170355.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!