1013. 数素数

 题目截图:

 

思路:

  把素数表打至第 N 个素数,然后按格式输出即可。

 

代码:

 1 /*
 2     【PAT B1013】数素数
 3 */
 4 
 5 #include <stdio.h>
 6 #include <string.h>
 7 #include <math.h>
 8 #include <stdlib.h>
 9 #include <time.h>
10 #include <stdbool.h>
11 
12 #define maxn 1000001
13 int pri[maxn], pNum=0;
14 bool p[maxn] = {0};    // 表示数是否被筛掉
15 
16 // 素数表的获取,埃氏筛选
17 void findPrime(int n) {
18     int i;
19     for(i=2; i<maxn; ++i) {
20         if(!p[i]) {                // 没有被筛掉,为素数 
21             pri[pNum++] = i;
22             if(pNum >= n) break;    // 只把素数表打至第 N 个素数 
23             int j; 
24             for(j=i+i; j<maxn; j+=i) {    // 筛掉倍数 
25                 p[j] = true;
26             }
27         }
28     } 
29 } 
30 
31 int main() {
32     int m, n;
33     scanf("%d%d", &m, &n);    // 输入 m,n
34     findPrime(n);            // 生成素数表
35     int i, cnt=1;
36     for(i=m; i<=n; ++i) {
37         printf("%d", pri[i-1]);    // 数组下标从 0 开始
38         if((cnt++)%10 && i<n) printf(" ");
39         else printf("\n");        // 每10个数字占1行 
40     } 
41 
42     return 0;
43 }

 

posted @ 2018-02-26 11:20  Just_for_Myself  阅读(184)  评论(0编辑  收藏  举报