cai_lw's competitive programming library
 
Loading...
Searching...
No Matches
pow.hpp
1#pragma once
2
3#include <cstdint>
4#include <functional>
5
6namespace cplib {
7
13template <typename T, typename Op = std::multiplies<T>>
14constexpr T pow(T base, uint64_t exp, Op&& op = {}) {
15 T res(1);
16 while (exp) {
17 if (exp & 1) {
18 res = op(res, base);
19 }
20 base = op(base, base);
21 exp >>= 1;
22 }
23 return res;
24}
25
26} // namespace cplib
constexpr T pow(T base, uint64_t exp, Op &&op={})
A generic exponetiation by squaring function.
Definition: pow.hpp:14