乙级|1013.数素数

题目描述

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数。 输入描...
    夏臻Rock阅读 1,090评论 0 0
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,464评论 0 5
  • 一、Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计...
    子非鱼_t_阅读 4,262评论 1 44
  • 1、class 和 id 的使用场景? class 重在样式的复用,重普遍性。 id重在划分样式区域,可以作为样式...
    不是我的简书阅读 769评论 0 0
  • (无啦)满碟佳肴桌上鲜,风卷残云去易无。光盘无再饭可添,一碟菜儿无晒啦。
    甘朝武阅读 198评论 0 0