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
'IT > Python' 카테고리의 다른 글
[백준] 9465번 스티커 [Python] - 다이나믹 (2) | 2023.10.25 |
---|---|
[백준] 1932번 정수 삼각형 [Python] - 다이나믹 (1) | 2023.10.23 |
[백준] 1149번 RGB거리 [Python] - 다이나믹 (2) | 2023.10.21 |
[백준] 11725번 트리의 부모 찾기 [Python] - 그래프 이론, BFS, DFS (1) | 2023.10.20 |