In [3]:
#brute solution

squares = []

for i in range(2, 101):
    for j in range(2,101):
        squares.append(i**j)
print len(list(set(squares)))
9183
In [2]:
print squares[:10]
[4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048]
In [19]:
def sum5digits(n):
    return sum([int(dig)**5 for dig in str(n)])
In [7]:
def sum4digits(n):
    return sum([int(dig)**4 for dig in str(n)])
In [18]:
cands1 = []

for i in range(1000,9999):
    if sum4digits(i) == i:
        cands1.append(i)

print cands1
[1634, 8208, 9474]
In [22]:
def solve30():
    cands = []
    for i in range(2,355000):
        if sum5digits(i) == i:
            cands.append(i)
    return sum(cands)
In [23]:
print solve30()
443839
In [ ]: