def digit_sum(n): return sum(int(x) for x in str(n)) j=100 k=1 res = [] while j<1000: k=1 x = digit_sum(j) while j >= x**k: k+=1 if j == x**k: res.append(j**k) j+=1 print res print digit_sum(512)