质数中的质数
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
如果一个质数,它在质数中的编号也是质数,就称为质数中的质数。
例如3是一个排在第2位质数,所以3是质数中的质数,虽然7是一个质数,但7排在第4位,所以7不是质数中的质数
给你一个数n,求出 >=n 的一个最小的质数中的质数
输入
输入一个数n(0<=n <= 10^6)
输出
输出>=n的最小的质数中的质数
示例输入
2 3 4
示例输出
3 3 5
提示
来源
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int b[1500001];
int n;
int vis[5000010];
int a[1500001];
int pan() //素数筛
{
int m=sqrt(2000000+0.5);
memset(vis,0,sizeof(vis));
for(int i=2;i<=m;i++)
if(!vis[i])
for(int j=i*i;j<=2000000;j+=i)
vis[j]=1;
}
int P()
{
int num=85714;
<span id="transmark"></span>
for(int i=1100003;i>=2;i--)
{
if(vis[i]==0)
{
b[num]=i;
if(vis[num]==0)
{
a[i]=num;
}
else
a[i]=a[i+1];
num--;
}
else
{a[i]=a[i+1];
}
}
}
int main()
{
pan();
P();
while(~scanf("%d",&n))
{
if(n==0||n==1)
printf("2\n");
// cout<<a[n];
else
printf("%d\n",b[a[n]]);
}
return 0;
}