콘텐츠로 건너뛰기
Home » 오일러 프로젝트 30

오일러 프로젝트 30

각 자리의 숫자를 4제곱해서 더했을 때 자기 자신이 되는 수는 놀랍게도 단 세 개밖에 없습니다.

  • 1634 = 14 + 64 + 34 + 44
  • 8208 = 84 + 24 + 04 + 84
  • 9474 = 94 + 44 + 74 + 44

(1 = 1**4의 경우는 엄밀히 말해 합이 아니므로 제외합니다) 위의 세 숫자를 모두 더하면 1634 + 8208 + 9474 = 19316 입니다. 그렇다면, 각 자리 숫자를 5제곱해서 더했을 때 자기 자신이 되는 수들의 합은 얼마입니까?

http://euler.synap.co.kr/prob_detail.php?id=30

접근

9의 5제곱은 59,049이며, 이 값에 7을 곱하면 413,343이다. 즉 일곱자리 숫자 9,999,999는 각 자리수를 다섯제곱한 합의 상한이 여섯자리이기 때문에 그 합이 자기 자신과 될 수 없다. 9의 5제곱의 6배는 354,294이며 이 값보다 큰 값은 실질적으로 해당 사항이 없다. 즉 2에서 35만 정도의 상한선 범위 내에서 조건에 맞는 수의 합을 구하면 된다.

print(sum(filter(lambda n: n == sum(c**5 for c in map(int, str(n))), range(2, 9**5*6+1)))

한 줄에 써서 좀 정신이 없는데, 다시 조금 보기 좋게 정리하면 아래와 같다.

def test(n: int) -> bool:
  s = sum(c**5 for c in map(int, str(n)))
  return n == s

print(sum(filter(test, range(2, 9**5*6+1))))