令Pi表示第i个素数。现任给两个正整数M <= N <= 10^4,请输出PM到PN的所有素数。
输入格式:
输入在一行中给出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
思路:此题避免两处陷阱:①10^4是指素数的编号,遍历前应将maxn设的更大一些;②虽然每10个数字后都要换行,但如果是最终个数是10的整数倍,那么最终格式不能出现多余的\n,否则还是提示格式错误。
#include<cstdio>
#include<cmath>
const int maxn=1000010;
bool judge(int a){
int i=floor(sqrt(a));
int k=2;
if(a==1)
return 0;
else if(a==2)
return 1;
else{
while(k<=i&&a%k!=0)
k++;
if(k<=i)
return 0;
else
return 1;//素数
}
}
int main(){
int M,N;
int num=1;
int cnt=0;
scanf("%d%d",&M,&N);
for(int j=2;j<=maxn;j++){
if(num>N)
break;
else if(judge(j)&&num<=N){
if(num>=M){
printf("%d",j);
cnt++;
if(num<N&&cnt%10!=0)
printf(" ");
if(cnt%10==0)
printf("\n");
}
num++;
}
}
return 0;
}