Project Euler 30
驚くべきことに, 各桁を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乗した和が元の数と一致するような数の総和を求めよ.
Mathematica
A = {}; For[i = 1, i < 10000000, i++ If[i == Total[IntegerDigits[i]^5], A = Append[A, i], {}] ] A Total[A]
どこまでいけばなくなるのかわからなかったので、1000万まで無理やり検証してます。
やはりIntegerDigits便利。(過去記事参照)
C/C++
#include <iostream> #include <cmath> using namespace std; int main(){ int n, sum, p, ans=0; for(int i=2 ; i<1000000 ; i++){ n = i; sum = 0; while(n!=0){ p = n%10; n /= 10; sum += (int)pow((double)p, 5); } if(sum == i) ans += i; } cout << ans << endl; int end; cin >> end; return 0; }
変数の命名の仕方がへったくそだなぁ、と反省する。