// To calculate x^n i.e. exponent(x, n) in O(log n) time in iterative way
// n is an integer and n >= 0
// Explanation: https://en.wikipedia.org/wiki/Exponentiation_by_squaring
// Examples:
// 2^3 = 8
// 5^0 = 1
// Uses the fact that
// exponent(x, n)
// = exponent(x*x, floor(n/2)) ; if n is odd
// = x*exponent(x*x, floor(n/2)) ; if n is even
const exponent = (x, n) => {
let answer = 1
while (n > 0) {
if (n % 2 !== 0) answer *= x
n = Math.floor(n / 2)
if (n > 0) x *= x
}
return answer
}
export { exponent }