solution1
直接判断
#include<stdio.h>
#include<math.h>
int main(){
int n, m, count = 0, flag, c = 0;
scanf("%d%d", &m, &n);
for(int i = 2; count < n; i++){
flag = 0;
for(int j = 2; j <= sqrt(i * 1.0); j++){
if(i % j == 0){
flag = 1;
break;
}
}
if(!flag){
count++;
if(count >= m){
c++;
printf("%d", i);
if(c % 10 != 0 && c != n - m + 1) printf(" ");
if(c % 10 == 0) printf("\n");
}
}
}
return 0;
}
solution2 埃氏筛法
#include<stdio.h>
const int maxN = 1000001;
int main(){
int hash[maxN] = {0}, p[maxN], pos = 0, n, m, count = 0;
scanf("%d%d", &m, &n);
for(int i = 2; i < maxN; i++){
if(!hash[i]){
p[pos++] = i;
if(pos >= n) break;
for(int j = 2 * i; j < maxN; j += i) hash[j] = 1;
}
}
for(int i = m - 1; i < n; i++){
count++;
printf("%d", p[i]);
if(count % 10 != 0 && count != n - m + 1) printf(" ");
if(count % 10 == 0) printf("\n");
}
return 0;
}