728x90
SMALL
문제
https://www.acmicpc.net/problem/1629
1629번: 곱셈
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
www.acmicpc.net
풀이
분할정복을 이용해서 풀었다.
B가 짝수일때 , A^B = A^(B/2) * A^(B/2) 이다.
B가 홀수일때, A^B= A^(B/2) * A^(B/2) * A 이다.
import sys
def fast_power(base, exponent, modulus):
result = 1
base %= modulus
while exponent > 0:
# 지수가 홀수인 경우
if exponent % 2 == 1:
result = (result * base) % modulus
exponent //= 2
# base를 제곱
base = (base * base) % modulus
return result
A, B, C = map(int, sys.stdin.readline().split())
result = fast_power(A, B, C)
print(result)
기본적인 거듭제곱 알고리즘은 의 시간복잡도를 갖지만, 빠른 거듭제곱 알고리즘은 지수를 반으로 나누어 재귀적으로 계산함으로써의 시간복잡도를 갖는다.
728x90
LIST
'코테공부 > python 백준' 카테고리의 다른 글
파이썬 백준 9663번: N-Queen (0) | 2024.04.15 |
---|---|
파이썬 백준 17478번 : 재귀함수가 뭔가요? (0) | 2024.04.15 |
파이썬 백준 15989번 : 1, 2, 3 더하기 4 (0) | 2024.04.09 |
파이썬 백준 9095번: 1,2,3 더하기 (0) | 2024.04.08 |
파이썬 백준 1495번 : 기타리스트 (0) | 2024.04.08 |