质数中的质数

质数中的质数

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<bits/stdc++.h>

using namespace std;

const long long M=1100001;

int a[M],b[M],c[M];

int main()
{
    int i,n,j;
    memset(a,0,sizeof(a));
    for (i=2;i<=M/2;i++)
    {
        if (!a[i])
        {
            for (j=2*i;j<M;j+=i)
                a[j]=1;
        }
    }                 //筛法求素数,下标为质数则a[i]=0 else a[i]=1
    a[0]=a[1]=1;
    j=0;
    for (int i=2;i<M;i++)
    {
        if (!a[i])
            b[j++]=i;   //将筛得的质数保存在 b数组中
    }
    int k=0;
    for (int i=0;i<j;i++)
    {
        if (!a[i+1])
        {
            c[k++]=b[i];  // 筛出质数中的质数保存在c数组中
        }
    }
    while (cin>>n)
    {
        if (n==1||n==0)
            cout<<2<<endl;  //声明当输入1or0时第一个质数中的质数为2,否则会WA,但实际上我个人认为这是错误的,坑啊!
        else
        {
            int *t=find(c,c+k,n); //find函数用于返回数组中第一个等于n的值的地址else返回数组最后一个值的下一位的地址即c+k
            if (t!=c+k)
                cout<<*t<<endl;
            else
            {
               cout<<*upper_bound(c,c+k,n)<<endl;//upper_bound函数用于返回第一个>n的值的地址
            }
        }
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值