zoukankan      html  css  js  c++  java
  • 51nod 1181 质数中的质数(质数筛法)

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

     
     
     

    输入

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

    输出

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

    输入样例

    20

    输出样例

    31

    用埃氏筛法筛选素数,如果是素数,num++,然后判断num如果是素数,就记录,按顺序记录,最后找第一个大于等于n的。
    代码:
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #define MAX 2000000
    #define mod 1000000000
    using namespace std;
    
    bool ispri[MAX];
    int ans[MAX],num,c;
    int main() {
        int n;
        scanf("%d",&n);
        memset(ispri,true,sizeof(ispri));
        ispri[0] = ispri[1] = false;
        for(int i = 2;i <= MAX;i ++) {
            if(ispri[i]) {
                num ++;
                if(ispri[num]) ans[c ++] = i;
                if(MAX / i >= i)//防止越界
                for(int j = i * i;j <= MAX;j += i) {
                    ispri[j] = false;
                }
            }
        }
        int l = 0,r = c - 1,mid;
        while(l < r) {
            mid = (l + r) / 2;
            if(ans[mid] >= n) r = mid;
            else l = mid + 1;
        }
        printf("%d",ans[l]);
    }
  • 相关阅读:
    2-Rsync备份-全网备份
    1-Rsync备份-备份概述
    复杂声明学习总结
    EasyExcel的用法
    listvue
    解决Error: Cannot find module 'node-sass'问题
    Webpack
    babel的使用
    nodejs的使用
    vue入门
  • 原文地址:https://www.cnblogs.com/8023spz/p/9965856.html
Copyright © 2011-2022 走看看