IT/Python
[백준] 1629번 곱셈 [Python]
joseph24
2023. 10. 23. 23:14
728x90
$A^{B} \,\%\, C \,=\, ?$
A, B, C 가 주어졌을 때 위 식의 답을 구하는 문제
더보기
문제
자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
출력
첫째 줄에 A를 B번 곱한 수를 C로 나눈 나머지를 출력한다.
분할 정복을 이용한 거듭 제곱
B가 2의 거듭제곱일 경우 재귀적으로 A의 제곱을 반복해서 너무 큰 지수 연산을 피한다.
B가 홀수 일때, $($B-1$)$의 절반에 대해서 위의 과정이 가능한지 확인한다.
A, B, C = map(int, input().split())
def f(a, b):
if b == 1:
return a
elif b%2:
x = f(a, (b-1)//2)
return x*x*a%C
else:
x = f(a, b//2)
return x*x%C
print(f(A%C, B))
pow함수를 사용하면
pow(base, exp, mod) = $(base ^ exp) % mod$의 값을 리턴해줍니다.
print(pow(*map(int, input().split())))
더보기
((A%C)**B)%C >>> 시간 초과
더보기
예제 입력 1
10 11 12
예제 출력 1
4