题目描述
令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出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
我的代码
#include<stdio.h>
#define N 10000
int main(){
int m,n,i,j,k,t1=0,t2=0,a[N];
scanf("%d %d",&m,&n);
for(i=0;i<N;i++){ //开始判断素数
for(j=2;j<i;j++){
if(i%j==0){ //不是素数
break;
}
}
if(j>=i){ //是素数
a[t1]=i; //将素数存储在数组中
t1++;
}
}
for(i=m+1;i<=n+1;i++){ //输出区间内的素数
t2++;
if(t2%10!=0&&i!=n+1){ //如果输出的数字不是每一行的最后一个以及最后一个数字
printf("%d ",a[i]);
}
if(t2%10==0){ //如果是每一行的最后一个
printf("%d",a[i]); //不打空格
printf("\n"); //空行
}
if(i==n+1){ //如果是最后一个数
printf("%d",a[i]); //也不要打空格
}
}
return 0;
}
分析
其实这道题算是比较简单的,首先是编写一段判断素数的代码,然后将得到的素数存进a[N]这个数组之中,在这里我用了t1来当数组的下标,使他们能够按照顺序进行存储,然后就是输出,如果按照题目的文字要求,应该是输出(M,N)之间所有的素数,但是不包过PM与PN,但是它给出的例子却是输出了PN和P(N+1),我是按照例子进行编码的。然后要注意题目的要求,首先是10个数一输出,并且每一行的最后一个数的后面不能加上空格,然后是输出的最后一个数后面也不能加上空格。代码整体上是对的,但是不足之处是给数组的容量是固定的,但是根据题目的要求N的最大值可以达到120000,但如果给的过大会运行超时,而过小可能不能全部通过。这道题是得了17分,两个超大的数没有能通过,代码我会改进的。
网友评论