# 1629
곱셈
🥈s1
A * A * A * ...B번 하기
O(B)
트리 깊이가 log2(B)이라고 치면
한 줄에 2개씩 생성되니까 2^n 등비수열의 합 트리 깊이만큼 하면~
값 똑같음
O(B)
?
아니 엥 멍청아
완전 이진 트리를 만들어버리네
multiply(a,nextB) * multiply(a,nextB)
가 아니라
mul = multiply(a,b // 2)
if b % 2 == 1 : # odd
return mul * mul * A
하면 이제~
그냥 깊이만큼!
O(log2(B))
는 바로 시간 초과 나와버리고
직접 거듭제곱 연산 사용 (A ** B):
Python에서 A ** B는 내부적으로 효율적인 방식으로 거듭제곱을 계산
일반적으로 고속 거듭제곱 알고리즘인 'Exponentiation by squaring'를 사용
O(logB) 시간에 계산
이럴 거면
A ** B 냈지
모듈러 연산
맨날 잊어버림
- (a×b)mod n = [(a mod n)×(b mod n)] mod n
맨 마지막에 한 번 하는 거랑 중간중간에 계속 하는 거랑 시간복잡도 차이?
=> 마지막에 한 번 큰 수를 나누는 게 훨씬 자원이 많이 소모된다~
머리도하고치마도입었지만 역시
'📊 Algorithm > BOJ' 카테고리의 다른 글
🔡 백준 - 6137 문자열 생성 (1) | 2024.12.05 |
---|---|
📆 백준 - 1308 D-Day 아이고나죽네.... (0) | 2024.12.02 |
🔘 백준 - 7869 두 원 (0) | 2024.10.29 |
〰️백준 - 17386 선분 교차 1 (2) | 2024.10.24 |
🏠백준 - 1069 집으로 (1) | 2024.10.14 |