どーも、みつおです。
素数を判定するプログラムを間違えて、かなり実行速度が遅くなって焦った。
問題
素数を小さい方から6つ並べると 2, 3, 5, 7, 11, 13 であり, 6番目の素数は 13 である.
10 001 番目の素数を求めよ.
出典:Problem7
解答
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Problem7 { class Program { static void Main(string[] args) { Console.WriteLine(Solve()); Console.ReadLine(); } private static int Solve() { int ret = 0; int sosuNo = 0; //素数が10001番目になるまでループ while (sosuNo != 10001) { //素数判定する値をインクリメント ret++; //素数判定 if (IsSosu(ret)) sosuNo++; } 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; //奇数でループ for (int i = 3; i < no; i += 2) { //割り切れるので素数じゃない if (no % i == 0) return false; } return ret; } } }
出力
104743