교대최소제곱법
[백준 파이썬 1629번 곱셈] 분할 정복 본문
지수 법칙
A^m+n = A^m x A^n
나머지 분배 법칙
(AxB)%C = (A%C) *(B%C) % C
예제 문제
https://www.acmicpc.net/problem/1629
분할 정복
→ 11 이면 5, 6으로 스플릿
→ 6 이면 3, 3으로 스플릿해서 계산한다
ex)
a = 10 , b = 11 , c = 12
10^11 % 12
= ((10^5)%12 x (10^5)%12 x 10)% 12
= (((10^2)%12 x (10^2)%12 x 10) %12 x ((10^2)%12 x (10^2)%12 x 10) %12 x 10) %12
11 -> 5 -> 2 -> 1 분할 정복
import sys
A, B, C = map(int, sys.stdin.readline().split())
def cal(a, b):
if b == 1:
return a % C
else:
tmp = cal(a, b//2)
if b % 2 == 0:
return (tmp * tmp) % C
else:
return (tmp * tmp * A) % C
print(cal(A, B))
+ int max = 2,147,483,647
'코딩테스트' 카테고리의 다른 글
[백준 파이썬 1647번 도시 분할 계획] 튜플과 리스트의 시간 차이 (0) | 2023.09.25 |
---|---|
[백준 파이썬 1197번 최소 스패닝 트리] 크루스칼 알고리즘, 프림 알고리즘 (0) | 2023.09.24 |
[백준 파이썬 11404번 플로이드] 플로이드 워셜 알고리즘 (0) | 2023.09.12 |
[코테준비] 메모리 초과 해결 (0) | 2023.09.11 |
[코테준비] 순열, 조합, 백트래킹 (0) | 2023.09.11 |