2012年7月6日金曜日

AOJ Volume0 0053: Sum of Prime Numbers

エラトステネスの篩で素数テーブルを作成する際、
確定した素数を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 件のコメント:

コメントを投稿