一、问题描述
1013 数素数 (20分)
令 Pi 表示第 i 个素数。现任给两个正整数 M≤N≤104,请输出 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
二、AC代码
1.找到前N个素数
2.当计数器等于M时,开始输出
3.每十个输出的数字后边不是空格而是换行符
#include<stdio.h>
#include<math.h>
int main(){
int m,n;
int cnt=0;//计算出现了多少个素数
int cnt_print=0;//计算输出了多少个数字
scanf("%d%d", &m, &n);
for(int i=2; cnt<n; i++){//这个地方的cnt当它等于n的时候,表明上一个循环已经对它处理过了,继续循环会输出第n+1个素数
int temp=i;
//判断temp是否为素数
int k=(int)sqrt(temp);
int flag=1;
for(int j=2; j<=k; j++){
if(temp%j==0)
flag=0;
}
if(flag==1){//temp是素数
cnt++;
if(cnt>=m){
printf("%d", temp);
cnt_print++;
if(cnt_print%10==0)
printf("\n");
else if(cnt!=n)
printf(" ");
}
}
}
return 0;
}
三、总结
之前的想法总是喜欢把处理过的数字放到数组里边,然后再针对下标进行数组元素的输出。但现在觉得其实每处理完一个数就把它输出,这种做法应该更好,毕竟不使用辅助数组,占用内存应该更小了。