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


Problem 10 「素数の和」 †
10以下の素数の和は 2 + 3 + 5 + 7 = 17 である.

200万以下の全ての素数の和を求めよ.

何も考えず篩にかけるだけです。

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

const int LIMIT=200*10000;
bool isPrime[LIMIT];

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 start=i*(2+(i&1));
 		int add  =i*(1+(i&1));
		for(int j=start;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;
}
最終更新:2014年11月16日 09:11