競技プログラミングの鉄則
次の問題へ
前の問題へ
A26 Prime Check
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("4");
WillReturn.Add("17");
WillReturn.Add("31");
WillReturn.Add("35");
WillReturn.Add("49");
//Yes
//Yes
//No
//No
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int[] XArr = InputList.Skip(1).Select(pX => int.Parse(pX)).ToArray();
int MaxX = XArr.Max();
Eratosthenes(MaxX);
foreach (int EachX in XArr) {
if (Array.BinarySearch(mSosuuArr, EachX) >= 0) {
Console.WriteLine("Yes");
}
else {
Console.WriteLine("No");
}
}
}
static long[] mSosuuArr;
// エラトステネスの篩
static void Eratosthenes(long pJyougen)
{
bool[] IsSosuuArr = new bool[pJyougen + 1];
for (int I = 2; I <= IsSosuuArr.GetUpperBound(0); I++) {
IsSosuuArr[I] = true;
}
for (int I = 2; I * I <= IsSosuuArr.GetUpperBound(0); I++) {
if (IsSosuuArr[I]) {
for (int J = I * 2; J <= IsSosuuArr.GetUpperBound(0); J += I) {
IsSosuuArr[J] = false;
}
}
}
var SosuuList = new List<long>();
for (int I = 2; I <= IsSosuuArr.GetUpperBound(0); I++) {
if (IsSosuuArr[I]) SosuuList.Add(I);
}
mSosuuArr = SosuuList.ToArray();
}
}
解説
エラトステネスの篩を使ってます。