Algorithm & Data Structure/Baekjoon
[Baekjoon/python] 곱셈 #1629
ju_young
2023. 6. 7. 18:46
728x90
https://www.acmicpc.net/problem/1629
1629번: 곱셈
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
www.acmicpc.net
문제
자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오.
코드
- 분할정복 적용
- memoization을 사용하여 이미 구한 값들을 저장 (안하면 시간초과)
import sys
input = sys.stdin.readline
A, B, C = map(int, input().split())
memo = {1: A % C}
def dfs(n):
if n in memo:
return memo[n]
result = (dfs(n // 2) * dfs(n - n // 2)) % C
memo[n] = result
return result
print(dfs(B))
728x90