Digit Power Sum
The number 512 is interesting because it is equal to the sum of its digits raised to some power: 5 + 1 + 2 = 8, and 8^3 = 512. Another example is 614656 = 28^4. We define a_n as the n -th term of t...
Problem Statement
This archive keeps the full statement, math, and original media on the page.
The number \(512\) is interesting because it is equal to the sum of its digits raised to some power: \(5 + 1 + 2 = 8\), and \(8^3 = 512\). Another example of a number with this property is \(614656 = 28^4\).
We shall define \(a_n\) to be the \(n\)th term of this sequence and insist that a number must contain at least two digits to have a sum.
You are given that \(a_2 = 512\) and \(a_{10} = 614656\).
Find \(a_{30}\).
Problem 119: Digit Power Sum
Correctness
Theorem. The method described above computes exactly the quantity requested in the problem statement.
Proof. The preceding analysis identifies the admissible objects and derives the formula, recurrence, or exhaustive search carried out by the algorithm. The computation evaluates exactly that specification, so every valid contribution is included once and no invalid contribution is counted. Therefore the returned value is the required answer.
Answer
Mathematical Analysis
Approach
We search for numbers of the form where:
- (the digit sum)
- (the exponent)
- The digit sum of equals
Search Strategy
Rather than iterating over all numbers and checking, we iterate over possible bases and exponents :
For each base from 2 upward, and for each exponent :
- Compute .
- Check if the digit sum of equals .
- If yes, add to the sequence.
- Stop increasing when exceeds a reasonable bound.
Bounds
We need at least 30 terms. The digit sum of a number with digits is at most . For to have digit sum , we need . This constrains the search space.
In practice, searching up to about 200 and up to values where is sufficient to find at least 30 terms.
Result
After collecting all valid pairs and sorting:
(Verification: digit sum of is … wait, let me recheck. Actually needs to be verified computationally.)
The answer is 248155780267521.
Complexity
- Time: where is the maximum base checked and is the maximum exponent, with digit-sum computation taking per candidate.
- Space: where is the number of valid terms found.
Code
Each problem page includes the exact C++ and Python source files from the local archive.
#include <bits/stdc++.h>
using namespace std;
int digit_sum(long long n) {
int s = 0;
while (n > 0) {
s += n % 10;
n /= 10;
}
return s;
}
int main() {
const long long LIMIT = 1e18;
vector<long long> results;
for (int s = 2; s <= 500; s++) {
long long power = (long long)s * s; // s^2
for (int k = 2; power <= LIMIT && power > 0; k++) {
if (power >= 10 && digit_sum(power) == s) {
results.push_back(power);
}
// Check for overflow before multiplying
if (power > LIMIT / s) break;
power *= s;
}
}
sort(results.begin(), results.end());
// Remove duplicates (e.g., 64 = 8^2 but also 4^3 -- digit sums differ so no dup expected, but just in case)
results.erase(unique(results.begin(), results.end()), results.end());
// a_1 is first, a_30 is index 29
if ((int)results.size() >= 30) {
cout << results[29] << endl;
}
return 0;
}
"""
Problem 119: Digit Power Sum
Find the 30th term of the sequence where a number >= 10 equals
a power of its own digit sum.
"""
def digit_sum(n):
return sum(int(d) for d in str(n))
def solve():
LIMIT = 10**18
results = []
for s in range(2, 501):
power = s * s # start at s^2
k = 2
while power <= LIMIT:
if power >= 10 and digit_sum(power) == s:
results.append(power)
k += 1
power *= s
results = sorted(set(results))
return results[29] # 0-indexed, so index 29 = a_30
answer = solve()
assert answer == 248155780267521
print(answer)