【来源】
【分析】
本题要求输出第M个至第N个素数(0<M≤N≤10000)。
思路为先估计第10000个素数的数值P,然后遍历从2到P的数,如果是素数,则计数。如果计数在M和N之间,则输出该数。同时使用一个单独的计数变量统计输出的素数的个数,每10个输出换行。
【源码】
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int n)
{
if (n < 2){
return false;
}
if (n == 2){
return true;
}
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 no = 0;
int count = 0;
for (int i = 2; i <= 104729; ++i){
if (isPrime(i)){
++no;
if (no >= m && no <= n){
if (count % 10 == 0){
cout << i;
}
else{
cout << " " << i ;
}
++count;
if (count % 10 == 0){
cout << endl;
}
}
}
}
return 0;
}
【点评】
本题考查素数的判定等知识。博主在做这道题时,网上搜索了第10000个素数的值,作为搜索的上界。应该有其他方式解决此问题,有空再改进。