トップページに戻る
次のC#のサンプルへ
前のC#のサンプルへ
Problem206 覆面平方数
問題
二乗すると「1_2_3_4_5_6_7_8_9_0」の形となるような唯一の正整数を求めよ.
ただし, 「_」は1桁の数である.
ソース
using System;
class Program
{
static void Main()
{
long StaVal = (long)Math.Ceiling(Math.Sqrt(1020304050607080900D));
//10の倍数のみが候補
long ModVal = StaVal % 10;
if (ModVal > 0) StaVal = StaVal - ModVal + 10;
long EndVal = (long)Math.Truncate(Math.Sqrt(1929394959697989990D));
for (long I = StaVal; I <= EndVal; I += 10) {
if (I % 10000000 == 0)
Console.WriteLine("{0}を検証中。残りは{1}", I, EndVal - I);
if (IsOK(I * I))
Console.WriteLine("Answer={0}", I);
}
}
static bool IsOK(long pTarget)
{
for (int I = 1; I <= 19; I++) {
long Amari = pTarget % 10;
if (I == 1 && Amari != 0L) return false;
if (I == 3 && Amari != 9L) return false;
if (I == 5 && Amari != 8L) return false;
if (I == 7 && Amari != 7L) return false;
if (I == 9 && Amari != 6L) return false;
if (I == 11 && Amari != 5L) return false;
if (I == 13 && Amari != 4L) return false;
if (I == 15 && Amari != 3L) return false;
if (I == 17 && Amari != 2L) return false;
if (I == 19 && Amari != 1L) return false;
pTarget /= 10;
}
return true;
}
}
実行結果
省略
1320000000を検証中。残りは69026623
1330000000を検証中。残りは59026623
1340000000を検証中。残りは49026623
1350000000を検証中。残りは39026623
1360000000を検証中。残りは29026623
1370000000を検証中。残りは19026623
1380000000を検証中。残りは9026623
Answer=1389019170
解説
2乗した時の、1桁目が0なので
10の倍数のみをチェック対象としてます。