P1013 数素数
转跳点:🐏
令 Pi 表示第 i 个素数。现任给两个正整数 M≤N≤104,请输出 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不易,诸君共勉!
大道五十,天衍四九,人遁其一!