PAT

1013.数素数

2018-07-21  本文已影响0人  yzbkaka

题目描述

令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分,两个超大的数没有能通过,代码我会改进的。

上一篇 下一篇

猜你喜欢

热点阅读