PAT乙级1013

题目链接

https://pintia.cn/problem-sets/994805260223102976/problems/994805309963354112

题解一

从第一个素数开始找起,输出(P_M)(P_N)即可

// PAT BasicLevel 1013
// https://pintia.cn/problem-sets/994805260223102976/problems/994805309963354112

#include <iostream>
using namespace std;

bool isPrime(int num);

int main()
{
    // 获取用户输入
    int n,m;
    cin >> m >> n;

    // 素数数量
    int count = 0;

    // 遍历判断是否为素数
    for (int num = 1;count<n;num+=1){
        // 是素数
        if(isPrime(num)){
            // 素数数量更新
            count++;   

            // 判断是否输出 
            if(count>=m){
                // 输出素数
                cout << num;
                if(count<n){
                    // 输出空格或者换行
                    if ((count - m + 1) % 10 == 0){ //每行的最后一个数字
                        cout << endl;
                    }else{ //
                        cout << ' ';
                    }
                }
            }
        }
    }
        
    //system("pause");
    return 0;
}

// 判断是否为素数
bool isPrime(int num)
{
    // 1不是素数
    if (num <= 1)
        return false;

    // 用这种方法找素数找的比较快,相当于i<sqrt(num),但这样精度可能损失,导致错误
    for (int i = 2; i * i <= num; i++)
    {
        if (num % i == 0)
            return false;
    }

    return true;
}

作者:@臭咸鱼

转载请注明出处:https://www.cnblogs.com/chouxianyu/

欢迎讨论和交流!


原文地址:https://www.cnblogs.com/chouxianyu/p/11303640.html