トップページに戻る    次の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より大きい数は調べても無駄であるからです。