Project Eulerの問題119を解決しようとしています:
数字 512 が興味深いのは、5 + 1 + 2 = 8 と 8^3 = 512 という数字の累乗の合計に等しいからです。このプロパティを持つ数字の別の例は、614656 = 28^4 です。
an をこの数列の n 番目の項と定義し、合計を得るには少なくとも 2 桁の数字が含まれている必要があると主張します。
a2 = 512 および a10 = 614656 が与えられます。
a30を見つけます。
質問: a30 が見つかるまですべての数字をチェックするよりも効率的に答えを見つける方法はありますか?
マイコード
int currentNum = 0;
long value = 0;
for (long a = 11; currentNum != 30; a++){ //maybe a++ is inefficient
int test = Util.sumDigits(a);
if (isPower(a, test)) {
currentNum++;
value = a;
System.out.println(value + ":" + currentNum);
}
}
System.out.println(value);
isPower は、a が検定の検出力かどうかをチェックします。Util.sumDigits:
public static int sumDigits(long n){
int sum = 0;
String s = "" + n;
while (!s.equals("")){
sum += Integer.parseInt("" + s.charAt(0));
s = s.substring(1);
}
return sum;
}
プログラムは約 30 分間実行されています (長いとオーバーフローする可能性があります)。出力 (これまで):
81:1
512:2
2401:3
4913:4
5832:5
17576:6
19683:7
234256:8
390625:9
614656:10
1679616:11
17210368:12
34012224:13
52521875:14
60466176:15
205962976:16
612220032:17