Project Euler
프로젝트 오일러 030
프로젝트 오일러 30번, 각 자리 숫자를 5제곱한 합이 자기 자신과 같은 수들의 합을 구합니다. 탐색 상한선을 계산하여 범위를 한정한 후, 파이썬 반복문으로 문제를 해결하는 과정을 보여줍니다.
1분
#project euler
#python
각 자리 수를 5제곱하기
‘각 자리 숫자를 제곱하여 그 합을 구하는 연산’에 따로 이름이 있는지 모르겠습니다. 그러니 우리는 이 연산을 “만두빚기”라고 부르기로 약속하겠습니다. (이름은 중요하지 않으니 자기가 원하는 이름을 붙여도 됩니다.)
한자리 수에서 만두빚기를 했을 때 한 자리 수가 되는 것은 1이 유일합니다. 한 자리 수 중에서 가장 큰 9는 만두빚기를 하면 59,049가 됩니다. 모든 숫자가 9로 이루어진 두 자리, 세 자리 숫자들은 만두빚기의 결과가 59,049의 배수가 될 것입니다. 그리고 만두빚기에는 다섯제곱이라는 과정이 있어 그 결과가 극적으로 커지는 것처럼 보이지만, 자리수를 늘려보면 만두빚기는 일정한 폭으로 늘어나기 때문에 어느 시점 이후부터는 원래의 수보다 작아지게 됩니다.
- mandoo(99) = 59,049 × 2 = 118,098
- mandoo(999) = 59,049 × 3 = 177,147
- mandoo(9,999) = 59,049 × 4 = 236,196
- mandoo(99,999) = 59,049 × 5 = 295,245
- mandoo(999,999) = 59,049 × 6 = 354,294
- mandoo(9,999,999) = 59,049 × 7 = 413,343
위 계산에서 볼 수 있듯, 만두빚기의 결과는 1천만 이하에서 최대 413,343입니다. 따라서 만두빚기의 결과가 자신과 같은 수는 413,343보다 작은 범위에서만 나타날 수 있습니다.
def mandoo(n: int):
return sum(int(x) ** 5 for x in str(n))
print(sum(x for x in range(10, 9**5*5+1) if mandoo(x) == x))