2014年3月11日火曜日

プロジェクトオイラー問10

Problem 10 「素数の和」 

10以下の素数の和は 2 + 3 + 5 + 7 = 17 である.
200万以下の全ての素数の和を求めよ.

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2010

解法
C++



#include<stdio.h>
#include<string.h>
#include<iostream>

const int LIMIT=2000*1000;
bool isPrime[LIMIT+1];

int main(){
    memset(isPrime,true,sizeof(isPrime));
    isPrime[0]=isPrime[1]=false;
    for(int i=2;i*i<=LIMIT;i+=1+(i&1)){
        if(isPrime[i]==false)continue;
        int s,add;
        if((i&1)==0){
            s=4;
            add=2;
        }else{
            s=i*i;
            add=2*i;
        }
        for(int j=s;j<=LIMIT;j+=add){
            isPrime[j]=false;
        }
    }
    __int64 ans=2;
    for(int i=3;i<=LIMIT;i+=2){
        ans+=i*isPrime[i];
    }
    std::cout<<ans<<"\n";

}

0 件のコメント:

コメントを投稿