AtCoderのARC
次のARCの問題へ
前のARCの問題へ
ARC118-C Coprime Set
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");
//84 60 105 70
}
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]);
var AnswerList = new List<int>();
AnswerList.Add(6);
AnswerList.Add(10);
AnswerList.Add(15);
for (int I = 4; I <= N; I++) {
AnswerList.Add(6 * I);
AnswerList.Add(10 * I);
AnswerList.Add(15 * I);
}
AnswerList = AnswerList.Distinct().OrderBy(pX => pX).Take(N).ToList();
Console.WriteLine(IntEnumJoin(" ", AnswerList));
}
// セパレータとInt型の列挙を引数として、結合したstringを返す
static string IntEnumJoin(string pSeparater, IEnumerable<int> pEnum)
{
string[] StrArr = Array.ConvertAll(pEnum.ToArray(), pX => pX.ToString());
return string.Join(pSeparater, StrArr);
}
}
解説
最小の素数である2,3,5を使って
6,10,15を考えると、この3つは、N=3の時の解になってます。
後は、この集合に6の倍数、10の倍数、15の倍数を足した集合を求めれば良いです。