처음에 보자마자 A**B%12
를 했더니 보기좋기 시간초과가 났다
단순 판별이 아닌 수학적 연산은 시간이 많이 걸리는 것 같다. 이 부분은 후에 CS에서 다뤄봐야겠다
만약 B제곱 할 때 B가 2 이상이면 이를 나눠서 곱셈했다.
예시를 들면
# 이 논리를 알면 쉽게 풀 수 있다
10**12%12 == (10**5 * 10**5)%12
# 즉 작은값으로 나누다 보면 2 또는 3까지 나눠질 수 있다.
# 이렇게 되면 메모리가 가는 부담이 적어져서 계산이 빨라진다
(10**5)%12 == (10**2 * 10**2 * 10**1)%12 == (10**2%12 * 10**2%12 * 10**1%12)
이런 식으로 분할하여 1이 될때까지 나눠갔다
import sys
a, b, c = map(int, sys.stdin.readline().split())
def multi(a, n):
if n==1:
return a%c
else:
tmp = multi(a, n//2)
if n%2==0:
return (tmp*tmp)%c
else:
return (tmp*tmp*a)%c