프로젝트 오일러 016

2의 1000승의 각 자리수의 합을 구하기

프로젝트 오일러 016
Photo by Greg Rakozy / Unsplash

문제

16번 문제
2<sup>1000</sup>의 각 자릿수를 모두 더하면?

큰 수의 곱셈 ∙ 거듭제곱

이번 문제 역시 큰 수와 관련된 내용입니다. 2의 10승이 1000쯤 되니, 2의 1,000승은 약 300자리 자연수가 됩니다. 큰 수의 곱셈에서는 파이썬에서 파이썬이 제공하는 것보다 빠른 연산을 구현하기는 어렵습니다.

print(sum(map(int, str(2**1000))))

혹은 13번 문제에서 사용한 s_add()를 사용해서 "1"을 천 번 두 배 하는 방법도 있죠.

s = "1"
for _ in range(1000):
  s = s_add(s, s)
print(sum(map(int, s)))

큰 수의 곱셈을 우리가 손으로 곱셈을 계산하는 방법을 그대로 적용해서 충분히 구현할 수 있습니다. 곱셈을 구현했다면 거듭제곱도 구현이 가능하겠죠. 어쨌든 그 부분은 다음 기회로 넘기고 오늘은 여기까지.