1013 数素数 (20分)
输入格式:
输入在一行中给出 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
分析:
题目比较简单,只用判断素数并输出第M个到第N个的所有素数即可。
为了减少代码运行速度,运用快速判断素数的方法。
判断方法详细可参考https://blog.csdn.net/keyboard77877/article/details/87453815
代码:
#include<iostream>
#include<cmath>
using namespace std;
bool isprime(int x) //快速判断素数
{
if (x == 1)return false;
if (x == 2 || x == 3)return true;
if (x % 6 != 1 && x % 6 != 5)return false;
for (int i = 5; i <= sqrt(x); ++i) {
if (x % i == 0 || x % (i + 2) == 0)return false;
}
return true;
}
int main()
{
int amount = 0;
int M, N;
cin >> M >> N;
for (int i = 2; amount < N; i++) {
if (isprime(i)) {
++amount;
if (amount >= M) { //格式化输出
cout << i;
if ((amount - M + 1) % 10 != 0&&amount!=N)cout << ' ';
else { cout << '\n'; }
}
}
}
return 0;
}