どーも、みつおです。
数学の問題以外で日常で5乗することなどあるのだろうか。
問題
驚くべきことに, 各桁を4乗した数の和が元の数と一致する数は3つしかない.
- 1634 = 1^4 + 6^4 + 3^4 + 4^4
- 8208 = 8^4 + 2^4 + 0^4 + 8^4
- 9474 = 9^4 + 4^4 + 7^4 + 4^4
ただし, 1=1^4は含まないものとする. この数たちの和は 1634 + 8208 + 9474 = 19316 である.
各桁を5乗した数の和が元の数と一致するような数の総和を求めよ.
出典:Problem30
解答
using System;
using System.Collections.Generic;
using System.Linq;
namespace Problem30
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Solve());
Console.ReadLine();
}
private static long Solve()
{
long ret = 0;
List<long> tmp = new List<long>();
//各桁の5乗の最大値 = 354294 = 9^5 * 6
for (long i = 2; i < 354294; i++)
{
Stack<long> st = new Stack<long>();
//元の数
long n = i;
//各桁の値を取得
while (n > 0)
{
st.Push(n % 10);
n /= 10;
}
//各桁を5乗した和が元の値と一致するか判定
if (i == SumStack(st)) tmp.Add(i);
}
//各桁を5乗した数の和が元の数と一致するような数の総和
ret = tmp.Sum();
return ret;
}
private static long SumStack(Stack<long> st)
{
long ret = 0;
//各桁分ループ
foreach (var t in st)
{
//5乗した値を足しこむ
ret += (long)Math.Pow(t, 5);
}
return ret;
}
}
}
出力
443839


コメント