エラトステネスの篩で素数テーブルを作成する際、
確定した素数をvectorに貯めておく。
/****************************
* 2012/07/04 *
* AOJ Volume0 0053 *
* Sum_of_Prime_Numbers *
* crane *
*****************************/
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
#define MAX_N 1000000
bool field[MAX_N];
int prime[MAX_N];
int main(){
vector<int> prime;
/* 素数テーブル作成 */
field[0] = false; field[1] = false;
for(int i=0; i<MAX_N; i++){
field[i] = true;
}
int count = 0;
prime.push_back(0);
for(int i=2; i<MAX_N; i++){
if(field[i]){
prime.push_back(i + prime[count]);
count++;
for(int j=i*2; j<MAX_N; j+=i)
field[j] = false;
}
}
int n;
while(cin >> n, n){
cout << prime[n] << endl;
}
}
0 件のコメント:
コメントを投稿