import sys
a, b, c = map(int, sys.stdin.readline().split())
def pow(a, b):
if b == 1:
return a % c
tmp = pow(a, b // 2)
if b % 2 == 0:
return tmp * tmp % c
else:
return tmp * tmp * a % c
print(pow(a, b))
문제를 통해 시간을 줄일 수 있는 부분은 b!!
a * a * a * a * a ..... 연속적이면 시간소모가 큼
따라서 나눠서 곱함(a, b = 5, 4 -> (5^2) * (5^2))
완전 이진트리 모양으로 생각하면 편함
'알고리즘' 카테고리의 다른 글
<리트코드> 42번 파이썬 알고리즘 [투 포인터] (0) | 2021.11.24 |
---|---|
<백준> 2579번 파이썬 알고리즘 [동적 프로그래밍] (0) | 2021.11.20 |
<백준> 1992번 파이썬 알고리즘 [분할 정복] (0) | 2021.11.08 |
<백준> 1780번 파이썬 알고리즘 [분할 정복] (0) | 2021.11.06 |
<백준> 18870번 파이썬 알고리즘 [딕셔너리] (0) | 2021.11.06 |