PAT 乙级 1013 数素数 | 刷题打卡

239 阅读1分钟

本文正在参与掘金团队号上线活动,点击查看大厂春招职位

一、题目描述

令 Pi表示第 i 个素数。现任给两个正整数 M≤N≤10^4,请输出 PM到 PN的所有素数。

输入格式: 输入在一行中给出 M 和 N,其间以空格分隔。

输出格式: 输出从 PM到 PN的所有素数,每 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

二、思路分析

考察了简单的素数算法以及按特定格式输入输出的技巧
素数是一个大于1的整数,除了1和它本身以外不再有其他的因数(不能被其他自然数整除)
我首先从2开始递增不断判断素数,直到素数个数为M开始输出,输出到第N个素数结束

三、AC代码

#include<bits/stdc++.h>
using namespace std;
bool isprime(int n)
{
    if(n==1) return false;
    for(int i=2;i<=sqrt(n);i++)
        if(n%i==0)
            return false;
    
    return true;
}
int main()
{
	int m,n;
	cin>>m>>n;
	int num=0,cnt=0;
	for(int i=2;num<=n;i++)
	{
		if(isprime(i))
		{
			num++;//num记录现在是第几个素数
			if(num>=m&&num<=n)
			{
				cnt++;//cnt记录已经输出了的素数个数
				if(cnt%10!=1)//输出之前判断是否要加空格
				    cout<<" ";
                                cout<<i;
                                if(cnt%10==0)//输出之后判断是否要换行
				    cout<<endl;
			}
                }
	}
	return 0;
}

四、总结

复习了素数算法
再刷一题,再接再厉😉