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; }