51nod 1181 质数中的质数

1181 质数中的质数(质数筛法)

题目来源: Sgu

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题

 收藏

 关注

如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数。现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做)。

Input

输入一个数N(N <= 10^6)

Output

输出>=N的最小的质数中的质数。

Input示例

20

Output示例

31法一、筛出质数后再筛质数中的质数
#include<cstdio>
#include<algorithm>
#define N 1001001
using namespace std;
int n,prime[N],cnt;
bool v[N],g[N];
int main()
{
    for(int i=2;i<N;i++)
    {
        if(!v[i]) prime[++cnt]=i;
        for(int j=1;j<=cnt;j++)
        {
            if(prime[j]*i>N-1) break;
            v[i*prime[j]]=true;
            if(i%prime[j]==0) break;
        }
    }
    for(int i=1;i<=cnt;i++)
     g[prime[prime[i]]]=true;
    scanf("%d",&n);
    for(int i=n;i<N;i++)
     if(g[i])
     {
         printf("%d",i);
         return 0;
     }
}

法二、

#include<cstdio>
#include<algorithm>
#define N 1001001
using namespace std;
int n,prime[N],cnt;
bool v[N],g[N];
int main()
{
    for(int i=2;i<N;i++)
    {
        if(!v[i]) prime[++cnt]=i;
        for(int j=1;j<=cnt;j++)
        {
            if(prime[j]*i>N-1) break;
            v[i*prime[j]]=true;
            if(i%prime[j]==0) break;
        }
    }
    scanf("%d",&n);
    int pos;
    pos = upper_bound( prime, prime + cnt, n - 1 ) - prime;
    //第一个大于等于n的质数的编号,也就是自pos以后的质数,都满足题目>=n的要求
    pos = upper_bound( prime, prime + cnt, pos-1 ) - prime;
    //所以要找>=pos的质数,最小的在哪一个位置
    printf( "%d\n", prime[prime[pos]] );
}
时间: 2024-10-25 17:26:18

51nod 1181 质数中的质数的相关文章

1181 质数中的质数(质数筛法)(51NOD基础)

1181 质数中的质数(质数筛法)(51NOD基础) 题目来源: Sgu 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数.例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数.现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做). Input 输入一个数N(N <= 10^6) Output 输出>=N的最小的质数中的质数. Input示例 20 Outpu

51Nod - 1181 质数中的质数(质数筛法)

如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数.例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数.现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做). Input输入一个数N(N <= 10^6)Output输出>=N的最小的质数中的质数.Sample Input 20 Sample Output 31 用eular质数筛即可 1 #include<iostream> 2 #include<cstdio>

1181 质数中的质数(质数筛法)

1181 质数中的质数(质数筛法) 基准时间限制:1 秒 空间限制:131072 KB 如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数.例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数.现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做). Input 输入一个数N(N <= 10^6) Output 输出>=N的最小的质数中的质数. Input示例 20 Output示例 31 #include <cstdlib>

改进筛法- 质数中的质数(质数筛法)

1181 质数中的质数(质数筛法) 题目来源: Sgu 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数.例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数.现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做). Input 输入一个数N(N <= 10^6) Output 输出>=N的最小的质数中的质数. Input示例 20 Output示例 31 最常

SDUT 3305 质数中的质数 (素数筛)

质数中的质数 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

19新生赛 质数中的质数

题目描述: hhs刚刚学会了如何判断一个数是质数,但现在hhs被一个与质数有关的问题难住了,求求你帮他解决这个问 题.问题如下: 如果质数在质数列表中也是质数,则称为质数中的质数. 例如:3 5分别是排第二和第三的质数,因此它们是 质数中的质数. 现在给出一个数字N,最小质数> = N中的质数是多少.(可以考虑用质数筛法来做)输入格式: 输入一个数N(N <= 10^6)输入格式: 输出>=N的最小的质数中的质数.样例输入 20输出 31 代码 #include<bits/stdc

[51NOD1181]质数中的质数(质数筛法)(欧拉筛)

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1181 思路:欧拉筛出所有素数和一个数的判定,找到大于n的最小质数序号p,并且判断p是不是质数,输出这个数. 1 /* 2 ━━━━━┒ギリギリ♂ eye! 3 ┓┏┓┏┓┃キリキリ♂ mind! 4 ┛┗┛┗┛┃\○/ 5 ┓┏┓┏┓┃ / 6 ┛┗┛┗┛┃ノ) 7 ┓┏┓┏┓┃ 8 ┛┗┛┗┛┃ 9 ┓┏┓┏┓┃ 10 ┛┗┛┗┛┃ 11 ┓┏┓┏┓┃ 12

51nod 1277 字符串中的最大值

题目链接 51nod 1277 字符串中的最大值 题解 对于单串,考虑多串的fail树,发现next数组的关系形成树形结构 建出next树,对于每一个前缀,他出现的次数就是他子树的大小 代码 #include<cstdio> #include<cstring> #include<algorithm> inline int read() { int x = 0,f = 1; char c = getchar(); while(c < '0' || c > '9

hihocoder 1287 : 数论一&#183;Miller-Rabin质数测试 大质数判定

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho最近突然对密码学产生了兴趣,其中有个叫RSA的公钥密码算法.RSA算法的计算过程中,需要找一些很大的质数. 小Ho:要如何来找出足够大的质数呢? 小Hi:我倒是有一个想法,我们可以先随机一个特别大的初始奇数,然后检查它是不是质数,如果不是就找比它大2的数,一直重复,直到找到一个质数为止. 小Ho:这样好像可行,那我就这么办吧. 过了一会儿,小Ho拿来了一张写满数字的纸条. 小Ho:我用程序随机生成了一些初