この記事の所要時間: 約 1分22秒
No.30 Digit fifth powers
問題.
驚いたことに, 自身の各桁の数字の 4 乗和として書ける数は 3 つしかない:\begin{align*}
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
\end{align*}ここで, \(1=1^4\) は含めていない.これらの数の和は \(1634+8208+9474=19316\).
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
\end{align*}ここで, \(1=1^4\) は含めていない.これらの数の和は \(1634+8208+9474=19316\).
では, 自身の各桁の数字の 5 乗和で書ける数の和はいくつになるか.
考え方とプログラム例.
まず, 調べる範囲を狭めるために次のようなことを考えます.
\(n\) 桁の自然数が, 各桁の 5 乗和で書けるとします.
\(n\) 桁の数は, 最小で \(10^{n-1}\), 最大で \(10^n-1\).
\(n\) 桁の数の各桁の数字の 5 乗和は, 最小で \(n\cdot 1^5=n\), 最大で \(n\cdot 9^5\) です.
すると, \(n\geqq 7\) のとき, \(n\cdot 9^5<10^{n-1}\) となるため, 上の 2 つの数が一致することはありません.
よって, 6 桁以下の数について調べればよいことが分かります.
今回は c言語で, 実行時間は 0.04sec でした.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#include <stdio.h> int fifth_power(int a); int main(){ int n, n_prime; int i; int sum_of_power; int sum = 0; int digit[6]; for(n = 2; n <= 999999; n++){ sum_of_power = 0; for(i = 0; i < 6; i++){ digit[i] = 0; } n_prime = n; for(i = 0; i < 6; i++){ digit[i] = n_prime % 10; n_prime /= 10; sum_of_power += fifth_power(digit[i]); } if(n == sum_of_power){ printf("%d\n", n); sum += n; } } printf("sum = %d\n", sum); } int fifth_power(int a){ return (a * a * a * a * a); } |