どーも、みつおです。
やっと10問目に到達。素数の和とは優しい問題だ。
問題
10以下の素数の和は 2 + 3 + 5 + 7 = 17 である.
200万以下の全ての素数の和を求めよ.
出典:Problem10
解答
using System;
using System.Collections.Generic;
using System.Linq;
namespace Problem10
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Solve());
Console.ReadLine();
}
private static long Solve()
{
long ret = 0;
int limit = 2000000;
List<long> sosulist = new List<long>();
//素数のリストを作成
for(int i = 1;i <= limit; i++)
{
//素数判定 素数だったらリストに追加
if (IsSosu(i)) sosulist.Add(i);
}
//素数の和
ret = sosulist.Sum();
return ret;
}
private static bool IsSosu(long no)
{
bool ret = true;
//数値が2未満(1)なら素数じゃない、2なら素数
if (no < 2) return false;
else if (no == 2) return true;
//数値が2で割り切れるなら素数じゃない
if (no % 2 == 0) return false;
//合成数xはp≦√xを満たす素因子pをもつ
double sqrtno = Math.Sqrt(no);
//奇数でループ
for (int i = 3; i < sqrtno; i += 2)
{
//割り切れるので素数じゃない
if (no % i == 0) return false;
}
return ret;
}
}
}
出力
143042032112