如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数。现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做)。
Input
输入一个数N(N <= 10^6)
Output
输出>=N的最小的质数中的质数。
Input示例
20
Output示例
31
找个题目发泄一下,数位dp不会
#include<cstdio>
#include<cstring>
#define maxn 1000000+11
int prime[maxn],ans[maxn];
void Init()
{
memset(prime,0,sizeof(prime));
int i,j,k=1;
prime[0]=prime[1]=1;
for(i=2;i<maxn;++i)
{
if(!prime[i])
{
ans[i]=k;
++k;
for(j=2*i;j<maxn;j+=i)
prime[j]=1;
}
}
}
int main()
{
Init();
int n;
while(scanf("%d",&n)!=EOF)
{
for(;n<maxn;++n)
{
if(!prime[n]&&!prime[ans[n]])
break;
}
printf("%d\n",n);
}
return 0;
}