[51nod1181]质数中的质数(素数筛法)
解题关键: 注意下标
1 #include<bits/stdc++.h> 2 #define maxn 10000002 3 using namespace std; 4 typedef long long ll; 5 bool is_prime[maxn+2]; 6 int prime[maxn+2]; 7 int sieve(){ 8 int p=0; 9 fill(is_prime,is_prime+maxn,true); 10 is_prime[0]=is_prime[1]=false; 11 for(int i=2;i<maxn;i++){ 12 if(is_prime[i]){ 13 prime[p++]=i; 14 for(int j=2*i;j<=maxn;j+=i){ 15 is_prime[j]=false; 16 } 17 } 18 } 19 return p; 20 } 21 int main(){ 22 int p=sieve(); 23 int n; 24 cin>>n; 25 int t1=lower_bound(prime,prime+p,n)-prime+1; 26 int t2=lower_bound(prime,prime+p,t1)-prime; 27 cout<<prime[prime[t2]-1]<<endl; 28 }