基準時間限制:1 秒空間限制:131072 KB分值: 0 難度:基礎題
如果一個質數,在質數列表中的編號也是質數,那麼就稱之爲質數中的質數。例如:3 5分別是排第2和第3的質數,所以他們是質數中的質數。現在給出一個數N,求>=N的最小的質數中的質數是多少(可以考慮用質數篩法來做)。
輸入一個數N(N <= 10^6)
輸出>=N的最小的質數中的質數。
20
14
31
17
埃拉託斯特尼篩法,也有人稱素數篩。這是一種簡單且歷史悠久的篩法,用來找出一定範圍內所有的素數。
所使用的原理是從2開始,將每個素數的各個倍數,標記成
借用維基的圖示
因爲數據範圍不大、才一百萬,我們可以先把所有的質數篩選出來,然後再用一個函數,比較這個數與他在質數裏面的位置是否均爲質數。
Talk is cheap,show u the code.
#include<iostream>
#include<cstring>
using namespace std;
#define maxm 1000050
bool f[1000050]= {1},s[1000050];
void prime(bool e[]) //篩選質數
{
e[1] = false;
for (int i = 2; i <= maxm; i++)
{
if(e[i])
{
for(int j = i*2; j <= maxm; j+=i)
e[j] = false;
}
}
return;
}
void sp(bool e[], bool g[]) //篩選質數中的質數
{
int j = 1;
for(int i = 2; i <= maxm; i++)
{
if(e[i])
{
if(e[j])
{
g[i] = 1;
}
j++;
}
}
return;
}
int main()
{
for(int i = 1; i <= maxm; i++)
f[i] = true;
int n;
cin>>n;
prime(f);
sp(f,s);
for(int i = n; i <= maxm; i++)
if(s[i] == 1)
{
cout<<i<<endl;
return 0;
}
return 0;
}