A, B, C = map(int, input().split())

def solve(A, B):
    if(B % 2 > 0):
        return solve(A, B - 1) * A
    elif(B == 0):
        return 1
    elif(B == 1):
        return A
    else:
        # 10^11에서 11을 %2 해줄때의 경우는 홀수와 짝수로 나뉘게 된다.
        # 첫 시작부터 % 12를 붙이고 끝까지 계산을 해보면,
        # 왜 result ** 2 % C가 필요한지 알 수 있다.
        result = solve(A, B//2)
        return result ** 2 % C

# 식을 보는 도중, 여기서 왜 또 %C를 해주는지 헷갈릴 수 있는데,
# solve(A, B)는 (10, 11)의 결괏값이고,
# (10, 11) % C는 문제가 원하는 정답이다.
print(solve(A, B) % C)

result ** 2 % C를 찾느라고 시간이 좀 더 걸렸다.
(10^10%12는 10^5^2%12와 같다.)

이 문제는 코드 길이에 비해 정답률이 낮길래 구글에 검색을 좀 해보았는데, 생각보다 풀이가 다양했다.

문제를 풀고 검색을 통해 다른 방법도 접해보길 바란다.

'# 코딩 문제 관련 > 파이썬' 카테고리의 다른 글

백준 2740번(python)  (0) 2020.07.11
백준 11401번(python)  (0) 2020.06.05
백준 1780번(python)  (0) 2020.05.04
백준 1992번(python)  (0) 2020.05.04
백준 2680번(python)  (0) 2020.05.03