输入样例:
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
解题思路:
从2开始查找,如果查找的数的个数在n到m之间就输出,并且需要一个计数器来计算输出数的个数,如果个数是10的整数倍,就输出换行。
#include<iostream>
#include<cmath>
using namespace std;
bool IsPrime(int n) {
if (n <= 3) {
return n > 1;
}
// 求平方根,注意sqrt()的参数为 double 类型,这里要强制转换m的类型
int k = (int)sqrt((double)n);
int i;
for (i = 2; i <= k; i++) {
if (n % i == 0) {
return false;
}
}
// 如果完成所有循环,那么m为素数
return true;
}
int main() {
int n, m;//开始数和结束的数
cin >> n >> m;
int count = 0;//用于计算素数的个数
int flag = 0;//计数器,用于判断输出数的个数
for (int i = 2;;i++) {
if (IsPrime(i)) {
//如果当前数是质数
count++;
if (count >= n&&count <= m) {
//如果质数的个数在范围内就输出
flag++;
if (count == m) {
//最后一个数据,不输出空格
printf("%d", i);
break;
}
if (flag % 10 == 0) {
//10个数字为一行
printf("%d\n", i);
}
else {
printf("%d ", i);
}
}
else if (count > m) {
break;
}
}
}
system("pause");
return 0;
}
唯有热爱方能抵御岁月漫长。