https://www.acmicpc.net/problem/1629
위 문제의 예제를 보면 10의 11제곱의 결과를 12로 나눈 나머지를 출력하는 문제이다. 그런데 이 숫자들의 범위가 2,147,483,647 이하의 숫자로 매우크다. 최악의 경우 최대값 만큼 제곱을 해야하기 때문에 O(n)으로는 풀 수 없다.
이 알고리즘의 아이디어는 제곱한 결과를 제곱해 나가는 것이다.
2^16 => 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2
2^16 => (((2 ^ 2) ^ 2) ^ 2)
def power(num, exp, mod):
if exp == 0:
return 1
else :
x = power(num, exp//2, mod)
if exp % 2 == 0 :
return (x * x) % mod
else :
return (x * x * num) % mod
A, B, C = map(int,input().split())
print(power(A, B, C))