問題30
驚くべきことに, 各桁の数字を4乗して合計すると元の数字になる数字は次の3つだけである.
ただし, は含まない.
それらの数の合計は, .では, 各桁の数字を5乗して合計すると元の数字になる数字の合計を求めよ.
http://projecteuler.net/index.php?section=problems&id=30
小さい方から探索していけば良いのですが, 上限を決めなければいけません. そこで数学の登場です!
n 桁の数字の各桁の4乗の合計は, 高々 . よって, 7桁以上の数になると絶対に問題の条件を満たさない. てなわけでコーディング.
#include <stdio.h> #include <stdlib.h> #include <math.h> const int RADIX = 10; const int UPPER_BOUND = 1000000; int sumOfFifthPowers(int); int main() { int number; int result; for (number = 2, result = 0; number < UPPER_BOUND; number++) { if (number == sumOfFifthPowers(number)) { fprintf(stdout, "%d\n", number); result += number; } } fprintf(stdout, "Solution: %d.\n", result); return EXIT_SUCCESS; } int sumOfFifthPowers(int number) { int digit; int sum; sum = 0; while (number) { digit = number % RADIX; number /= RADIX; sum += pow(digit, 5); } return sum; }