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";
}
#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 件のコメント:
コメントを投稿