https://www.acmicpc.net/problem/1629
문제
자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
출력
첫째 줄에 A를 B번 곱한 수를 C로 나눈 나머지를 출력한다.
앞서 풀었던 이항 계수 문제에서 사용했던 거듭제곱의 분할정복을 적용한 방법으로 해결하였습니다.
import sys
input = sys.stdin.readline
# 거듭제곱 계산(나머지 연산 적용)
def power(a, b, c):
if b == 0:
return 1
if b % 2: #홀수이면
return (power(a, b//2, c) ** 2 * a) % c
else: #짝수이면
return (power(a, b//2, c) ** 2) % c
A, B, C = map(int, input().split())
print(power(A, B, C))
'Coding Test > 백준' 카테고리의 다른 글
[백준] / [Python] / [11444] 피보나치 수 6 (0) | 2023.01.05 |
---|---|
[백준] / [Python] / [10830] 행렬 제곱 (0) | 2023.01.04 |
[백준] / [Python] / [2740] 행렬 곱셈 (0) | 2022.12.30 |
[백준] / [Python] / [11401] 이항 계수 3 (0) | 2022.12.28 |
[백준] / [Python] / [1780] 종이의 개수 (0) | 2022.12.27 |