トップページに戻る
次のC#のサンプルへ
前のC#のサンプルへ
Problem30 各桁を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乗した和が元の数と一致する数の総和を求めよ.
ソース
using System;
class Program
{
//const int TargetJyousuu = 4;
const int TargetJyousuu = 5;
static void Main()
{
int Jyougen = DeriveBekijyou(9) * 6;
int Answer = 0;
for (int I = 2; I <= Jyougen; I++) {
char[] wkArr = I.ToString().ToCharArray();
int wkSum = 0;
for (int J = 0; J <= wkArr.GetUpperBound(0); J++) {
wkSum += DeriveBekijyou(wkArr[J] - '0');
if (wkSum > I) break;
}
if (wkSum == I)
Console.WriteLine("{0,6}が一致。ここまでの和は、{1,6}", wkSum, Answer += wkSum);
}
}
//N乗を求める
static int DeriveBekijyou(int pTarget)
{
int WillReturn = 1;
for (int I = 1; I <= TargetJyousuu; I++)
WillReturn *= pTarget;
return WillReturn;
}
}
実行結果
4150が一致。ここまでの和は、 4150
4151が一致。ここまでの和は、 8301
54748が一致。ここまでの和は、 63049
92727が一致。ここまでの和は、155776
93084が一致。ここまでの和は、248860
194979が一致。ここまでの和は、443839
解説
最初に6桁での各桁を5乗した和の最大値を求めてから、ナイーブに調べてます。
1桁での最大値 = 9の5乗*1 = 59049
2桁での最大値 = 9の5乗*2 = 118098
3桁での最大値 = 9の5乗*3 = 177147
4桁での最大値 = 9の5乗*4 = 236196
5桁での最大値 = 9の5乗*5 = 295245
6桁での最大値 = 9の5乗*6 = 354294
7桁での最大値 = 9の5乗*7 = 413343
ですので、
7桁は、調べても無駄であり、
6桁も354294より大きい数は調べても無駄であるからです。