质数中的质数(质数筛法)[质数筛法]
描述
如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数。现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做)。
Input
输入一个数N(N <= 10^6)
Output
输出>=N的最小的质数中的质数。
Input示例
20
Output示例
31
题解
过大的质数存取会使运行时间过长,我们知道质数的倍数肯定不为质数,所以我们建立筛,将质数i的倍数记为1,将质数存在数组a中,最后将质数数组a搜索比N大的最小质数输出,即为质数的质数。
实现代码:
#include<bits/stdc++.h>
#define N 1000000
int a[N]={0},b[N]={1,1,0};//建立筛,b数组初始化(0,1不为质数,质数从2开始)
int main()
{
int i,j,x=1,n,z=1;
for(i=2;i<N;i++)//筛选所有的质数
{
if(!b[i])
{
a[z]=i;
z++;//在数组a中储存质数
}
for(j=i*2;j<N;j+=i)
{
b[j]=1;//将非质数数组记位1
}
}
scanf("%d",&n);
while(a[a[x]]<n){x++;}//寻找比n大的最小的质数的质数
printf("%d",a[a[x]]);
}