トップページに戻る
次のC#のサンプルへ
前のC#のサンプルへ
遊び倒すガイド 初級編 100万以下の素数番目の素数の総和
問題
よく知られているように、
2は1番目の素数であり、
3は2番目、
5は3番目、
7は4番目の素数である。
n番目の素数pに対し、nもまた素数である場合に、pを「素数番目の素数」と呼ぶことにしよう。
3と5は素数番目の素数だが、2と7はそうではない。
100万以下の素数番目の素数の総和を求めよ。
プロジェクトオイラーを遊び倒すガイド (初級編)
ソース
using System;
using System.Linq;
class Program
{
const int Jyougen = 1000000;
static int[] SosuuArr = new int[Jyougen + 1];
//エラトステネスの篩
static void Eratosthenes()
{
for (int I = 2; I <= SosuuArr.GetUpperBound(0); I++) {
SosuuArr[I] = I;
}
for (int I = 2; I * I <= SosuuArr.GetUpperBound(0); I++) {
if (I != 2 && I % 2 == 0) continue;
if (SosuuArr[I] != 0) {
for (int J = I * 2; J <= SosuuArr.GetUpperBound(0); J += I) {
SosuuArr[J] = 0;
}
}
}
SosuuArr = SosuuArr.Where(X => X != 0).ToArray();
}
static void Main()
{
Eratosthenes();
long SumVal = 0;
for (int I = 0; I <= SosuuArr.GetUpperBound(0); I++) {
if (Array.BinarySearch(SosuuArr, I + 1) >= 0)
SumVal += SosuuArr[I];
}
Console.WriteLine("Answer={0}", SumVal);
}
}
実行結果
Answer=3475059124
解説
100万以下の素数は、7万件あるので、Array.BinarySearchを使ってます。
ジェネリック版のArray.BinarySearchを明示的に使ってもいいでしょう。
MSDN --- Array.BinarySearch