2150:Matsuzaki Number

エラトステネスのふるいで十分な数の素数を求める。
Nより大きい素数の配列を適当な数まで作り
それぞれの和を計算した。

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int main(void){
  vector<int>num,ans;
  int n,p,prime[1000001];

  for(int i=0;i<1000001;i++)prime[i]=0;
  prime[0]=prime[1]=1;

  for(int i=2;i*i<1000001;i++){
    if(prime[i]==0){
      for(int j=2*i;j<1000001;j+=i){
	prime[j]=1;
      }
    }
  }

  while(cin >> n >> p){
    if(n<0 && p<0)break;
    num.clear();
    ans.clear();

    for(int i=n+1;i<n+p+1000;i++)
      if(prime[i]==0)num.push_back(i);

    for(int i=0;i<num.size();i++){
      for(int j=i;j<num.size();j++){
	ans.push_back(num[i]+num[j]);
      }
    }
    sort(ans.begin(),ans.end());

    cout << ans[p-1] << endl;
  }

  return 0;
}