AtCoderの企業コンテスト
次の企業コンテストの問題へ
前の企業コンテストの問題へ
第二回日本最強プログラマー学生選手権 C Max GCD 2
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("2 4");
//2
}
else if (InputPattern == "Input2") {
WillReturn.Add("199999 200000");
//1
}
else if (InputPattern == "Input3") {
WillReturn.Add("101 139");
//34
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
long[] wkArr = InputList[0].Split(' ').Select(pX => long.Parse(pX)).ToArray();
long A = wkArr[0];
long B = wkArr[1];
long Answer = 1;
for (long I = 1; I <= B; I++) {
long BaisuuCnt = DeriveBaisuuCnt(A, B, I);
if (BaisuuCnt >= 2) {
Answer = I;
}
}
Console.WriteLine(Answer);
}
// 範囲の開始と終了と、数Aを指定して、Aの倍数が何個あるかを返す
static long DeriveBaisuuCnt(long pSta, long pEnd, long pA)
{
long StaSyou = pSta / pA;
if (pSta % pA > 0) {
StaSyou++;
}
long EndSyou = pEnd / pA;
return EndSyou - StaSyou + 1;
}
}
解説
下記の考え方で、公約数の候補を全探索してます。
2を公約数に持つには、AからBの区間に、2の倍数が2個以上あればいいです。
3を公約数に持つには、AからBの区間に、3の倍数が2個以上あればいいです。
4を公約数に持つには、AからBの区間に、4の倍数が2個以上あればいいです。
5を公約数に持つには、AからBの区間に、5の倍数が2個以上あればいいです。
以下同様