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