51nod 1181 质数中的质数(质数筛法)
Posted 8023spz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod 1181 质数中的质数(质数筛法)相关的知识,希望对你有一定的参考价值。
如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数。现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做)。
输入
输入一个数N(N <= 10^6)
输出
输出>=N的最小的质数中的质数。
输入样例
20
输出样例
31
用埃氏筛法筛选素数,如果是素数,num++,然后判断num如果是素数,就记录,按顺序记录,最后找第一个大于等于n的。
代码:
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #define MAX 2000000 #define mod 1000000000 using namespace std; bool ispri[MAX]; int ans[MAX],num,c; int main() { int n; scanf("%d",&n); memset(ispri,true,sizeof(ispri)); ispri[0] = ispri[1] = false; for(int i = 2;i <= MAX;i ++) { if(ispri[i]) { num ++; if(ispri[num]) ans[c ++] = i; if(MAX / i >= i)//防止越界 for(int j = i * i;j <= MAX;j += i) { ispri[j] = false; } } } int l = 0,r = c - 1,mid; while(l < r) { mid = (l + r) / 2; if(ans[mid] >= n) r = mid; else l = mid + 1; } printf("%d",ans[l]); }
以上是关于51nod 1181 质数中的质数(质数筛法)的主要内容,如果未能解决你的问题,请参考以下文章