PAT乙级1013

题目链接

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

题解一

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// 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/

欢迎讨论和交流!