1181 . 质数中的质数(质数筛法)
题目来源:
Sgu
时间限制:1 秒 空间限制:65536 KB 分值: 0
如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数。现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做)。
Input
输入一个数N(N <= 10^6)
Output
输出>=N的最小的质数中的质数。
Input 示例
20
Output 示例
31 题目思路就是先将素数打表,然后再将打表出来的素数继续打表#include<stdio.h> #include<string.h> #include<math.h> #define N 1000000+5 int a[N],b[N]; void prime() { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); int len = 1; int m, n; a[0] = a[1] = 1; m = sqrt(N)+1; for(int i = 2;i <= m;i ++){ if(!a[i]){ for(int j = i+i;j <= N;j +=i) a[j] = 1; } } for(int i = 2;i <= N;i ++){ if(!a[i]) b[len++] = i; } b[0] = b[1] = 0; n = sqrt(len) + 1; for(int i = 2;i <= n;i ++){ if(b[i]){ for(int j = i+i;j <= len;j +=i) b[j] = 0; } } } int main() { prime(); int n; while(~scanf("%d",&n)){ int i = 0; while(1){ if(b[i]>=n){ printf("%d\n",b[i]); break; } i++; } } return 0; }