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 }