C#でプロジェクトオイラーを解く(問題10「素数の和」)

プロジェクトオイラー
Pocket

どーも、みつおです。

やっと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

コメント

タイトルとURLをコピーしました