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

来源:互联网 发布:淘宝店对宝贝描述 编辑:程序博客网 时间:2024/05/04 18:20

题目意思:

51nod 1181. 质数中的质数(质数筛法)

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1181

如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数。现在给出一个数N,求>=N的最小的质数中的质数是多少。
Input
输入一个数N(N <= 10^6)
Output
输出>=N的最小的质数中的质数。
Input 示例
20
Output 示例
31

题目分析:

快速筛选素数,用a数组保存哪个数是素数,用prime数组保存该素数的位置。


AC代码:

C#(我的第一个c#程序)

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            int[] a = new int[1000005], prime = new int[1000005];            int k = 0;            for(int i=2;i<=1000000;i++){                if(a[i]==0){                    for(int j=i+i;j<=1000000;j+=i){                        a[j]=1;                    }                    prime[i]=++k;                }            }            int n;            n=Convert.ToInt32(Console.ReadLine());            for (k = n; ; k++){                if (a[k] == 0 && a[prime[k]] == 0) break;            }            Console.WriteLine("{0}\n",k);        }    }}



c++代码:

#include<iostream>using namespace std;int prime[1000005],a[1000005]={0};int main(){    int k=0;    for(int i=2;i<=1000000;i++){        if(!a[i]){            for(int j=i+i;j<=1000000;j+=i){                a[j]=1;            }            prime[i]=++k;        }    }    int n;    while(cin>>n){        int i;        for(i=n;!((!a[i])&&(!a[prime[i]]));i++);        cout<<i<<endl;    }    return 0;}



0 0