题目链接在此。
思路
用筛法求出素数表,之后根据输入的两个数m,n取对应的数组下标输出即可。
其实这种方法有些暴力了,可以不从2开始求素数,从m(第一个输入的数)到n之间的第一个素数开始求就行。
AC代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int m,n;
const int maxn = 999999;
bool book[maxn] = {false};
int prime[maxn], num = 0;
//筛法求素数表
void findPrime(int count){
for(int i = 2; i < maxn; i++){
if(book[i] == false){
prime[num++] = i;
if(num == count){
return;
}
for(int j = i+i; j < maxn; j += i){
book[j] = true;
}
}
}
}
int main(){
scanf("%d %d",&m, &n);
findPrime(n);
int count = 0;
for(int i = m-1; i < n; i++){
if(count == 0){
printf("%d",prime[i]);
}else{
printf(" %d",prime[i]);
}
count++;
if(count == 10){
printf("\n");
count = 0;
}
}
return 0;
}