P1013 数素数

转跳点:🐏
令 Pi​​ 表示第 i 个素数。现任给两个正整数 MN104​​,请输出 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



  这道题又把我写成了,不知道为什么边界值会明明说好从n->M闭区间,结果是n-1到m-1的闭区间。(主要还是因为自己是个蒟蒻,太菜了(*/ω\*))
估计素数从-1开始数的吧。
  这道题就是先打出素数的表,然后一个for查找输出n->m之间的素数,除了格式控制有点麻烦其他都还简单。关于求素数的方法,点击狗头,不在此处细讲。

代码:
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <limits.h>
 4 #define MAXSIZE (104743 + 500)
 5 
 6 int Isprime[MAXSIZE];
 7 int Prime[MAXSIZE];
 8 int cnt;
 9 void Euler_prime(int size);
10 
11 int main(int argc, char const *argv[])
12 {
13     Euler_prime(MAXSIZE);
14 
15     int start, end, count = 0;
16     ;
17     scanf("%d%d", &start, &end);
18 
19     for (int i = start-1; i < end; i++)
20     {
21         count++;
22         printf("%d", Prime[i]);
23         if (10 == count)
24         {
25             putchar('\n');
26             count = 0;
27             continue;
28         }
29         if (end-1 == i)
30         {
31             continue;
32         }
33         putchar(' ');
34     }
35 
36     return 0;
37 }
38 
39 void Euler_prime(int size)
40 {
41     Isprime[0] = Isprime[1] = 1;
42     for (int i = 2; i <= MAXSIZE; i++)
43     {
44         if (!Isprime[i])
45         {
46             Prime[cnt++] = i;
47         }
48         for (int j = 0; j < cnt && i * Prime[j] < MAXSIZE; j++)
49         {
50             Isprime[i * Prime[j]] = 1;
51             if (!(i % Prime[j]))
52             {
53                 break;
54             }
55         }
56     }
57 }

  由于这道题c++和c的解法没什么区别,就不贴C++的代码了;

PTA不易,诸君共勉!

posted @ 2019-12-24 11:26  秦_殇  阅读(214)  评论(0编辑  收藏  举报