스스로 공부하기/알고리즘
[알고리즘] 빠른 거듭제곱 알고리즘 (bit set을 이용한 빠른 거듭제곱)
Seohyeong Lee
2022. 11. 1. 16:15
상아탑 6주차 중
거듭제곱을 빠르게 계산하는 알고리즘 (ex. 3^2500000000....)
우선 지수를 이진법으로 표현하고, 이것을 exp로 설정
base = 밑
#include <iostream>
int power(base, exp) {
int ret = 1; // 결과값을 1로 우선 설정
while(exp){ //exp가 존재하는 동안 = 자릿수를 모두 이동하는 동안
if(exp & 1 == 1) ret *= base; //1번째 자리가 1일 경우 ret*=base
exp >>= 1; //오른쪽 옆으로 한 칸씩 이동
base *= base; //base를 제곱해줌. 이진법에 따라 자릿수 이동할 때마다 실제 숫자는 제곱
}
return ret; //ret값을 반환
}
위와 같은 코드를 이용해 bit set을 응용한 빠른 거듭제곱 알고리즘을 설계할 수 있다.