题目来源: Sgu
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
收藏
关注
如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数。现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做)。
Input
输入一个数N(N <= 10^6)
Output
输出>=N的最小的质数中的质数。
Input示例
20
Output示例
31
比较水的一道题吧,刚开始用素数打表(欧拉筛法),然后从给的数往后遍历就行了,注意所给数直接就是质数的质数。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 10000006;
ll prime[maxn];
bool vis[maxn];
int isprime(int n)
{
if(n==2) return 1;
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
return 0;
break;
}
}
return 1;
}
ll getprime(int n)
{
ll k=0;
memset(vis,0,sizeof vis);
for(int i=2;i<=n;i++)
{
if(!vis[i]) prime[k++]=i;
for(int j=0;j<k;j++)
{
if(i*prime[j]>maxn) break;
vis[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
return k;
}
int main()
{
int t;
cin>>t;
ll s=getprime(t);
if(isprime(t)==1&&isprime(t)==1)
{
cout<<t<<endl;
}
else
{
for(int i=t;;i++)
{
if(isprime(i)==1)
s++;
if(isprime(i)==1&&isprime(s)==1)
{
cout<<i<<endl;
break;
}
}
}
return 0;
}