AtCoderのABC
次のABCの問題へ
前のABCの問題へ
ABC096-D Five, Five Everywhere
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("5");
//3 5 7 11 31
}
else if (InputPattern == "Input2") {
WillReturn.Add("6");
//2 3 5 7 11 13
}
else if (InputPattern == "Input3") {
WillReturn.Add("8");
//2 5 7 13 19 37 67 79
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int N = int.Parse(InputList[0]);
Eratosthenes(55555);
int[] AnswerIntArr = mSosuuArr.Where(X => X % 5 == 1).Take(N).ToArray();
string[] AnswerStrArr = Array.ConvertAll(AnswerIntArr, pX => pX.ToString());
Console.WriteLine(string.Join(" ", AnswerStrArr));
}
static int[] mSosuuArr;
// エラトステネスの篩
static void Eratosthenes(int pJyougen)
{
var IsSosuuArr = new System.Collections.BitArray(pJyougen + 1);
for (int I = 2; I <= IsSosuuArr.Count - 1; I++) {
IsSosuuArr[I] = true;
}
for (int I = 2; I * I <= IsSosuuArr.Count - 1; I++) {
if (IsSosuuArr[I]) {
for (int J = I * 2; J <= IsSosuuArr.Count - 1; J += I) {
IsSosuuArr[J] = false;
}
}
}
var SosuuList = new List<int>();
for (int I = 2; I <= IsSosuuArr.Count - 1; I++)
if (IsSosuuArr[I]) SosuuList.Add(I);
mSosuuArr = SosuuList.ToArray();
}
}
解説
数列の全ての項が、5以上かつ55555以下の素数で、
5で割った余りが1になるようにしてます。