如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数。现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做)。
Input
输入一个数N(N <= 10^6)
Output
输出>=N的最小的质数中的质数。
Input示例
20
Output示例
31
题解:
输出苏素数中的素数
用埃拉算法 先算出顺序表中的素数 之后算出素数中的素数即可
代码:
#include<iostream>
#include<algorithm>
#include<string.h>
#include<cmath>
using namespace std;
const int m=1e+6;
int su[m],n,num,e[m];
bool u[m];
void prapear(int su[]){
num=0;
memset(u,true,sizeof(u));
for(int i=2;i<=m;i++){
if(u[i])
for(int j=2;j*i<=m;j++) u[j*i]=false;
}
for(int i=2;i<=m;i++) if(u[i]) su[++num]=su[i];
}
void put(int su[])
{
for(int i=1;i<=30;i++)
cout<<su[i]<<" ";
cout<<endl;
}
int main()
{
for(int i=0;i<m;i++)
su[i]=i;
//put();
prapear(su); //算出顺序表中的素数
//put(su);
prapear(su); //算出素数中的素数
// put(su);
num=0;
for(int i=0;i<m;i++){
if(i<=su[num]) e[i]=su[num];
else {num++;e[i]=su[num];}
// cout<<i<<" "<<e[i]<<endl;
}
cin>>n;
cout<<e[n]<<endl;
}