トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
No.300 平方数
■■■問題■■■
平方数とは、ある整数の2乗で表される整数である。
Xが与えられるので、
X * Y = Zの2乗 (X,Y,Zは1以上の自然数)
となるような最小のYを求めよ。
■■■入力■■■
X
1 <= X <= 100億
■■■出力■■■
X * Y が平方数になるような最小のYを1行に出力せよ。
C#のソース
using System;
using System.Collections.Generic;
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("4");
//1
}
else if (InputPattern == "Input2") {
WillReturn.Add("8");
//2
}
else if (InputPattern == "Input3") {
WillReturn.Add("459431198626");
//114514
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
long X = long.Parse(InputList[0]);
//平方数の倍数なら、その平方数で割る
for (long I = 2; I * I <= X; I++) {
long wkHeihouSuu = I * I;
while (X % wkHeihouSuu == 0)
X /= wkHeihouSuu;
}
Console.WriteLine(X);
}
}
解説
平方数を約数に持ってたら、その平方数で割る処理を繰り返し、
最後の値が解となります。