思路:
1、运用埃氏筛法;
2、利用cnt计数,记录当前的素数是第几个。当cnt >= M时,即可输出;当 cnt >= N时即可退出;
注意:当cnt == N时也需要输出回车
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 1000001
int cnt, M, N;
bool p[maxn]; //表示是否为素数,默认所有数均为素数
void PrimeTable(){ //埃氏筛法,输出第M ~ 第N个素数
for(int i = 2; i < maxn; ++i){
if(cnt >= N) break; //当到达第N个时退出
if(p[i]){//如果是素数,则开始计数,同时当到达第M个时,开始输出
cnt++;
if(cnt >= M){ //输出
cout << i;
//从M开始,每10个就要换行,且当到达N时也要回车
if((cnt-M + 1) % 10 == 0 || cnt == N) cout << endl;
else cout << " ";
}
for(int j = i * 2; j < maxn; j +=i) //将素数的倍数均置为合数,从2倍开始
p[j] = false;
}
}
}
int main(){
fill(p, p + maxn, true); //将表全置为true
cin >> M >> N;
PrimeTable();
return 0;
}