#pragma once #include #include template static constexpr T binpow(T a, N n) { static_assert(std::is_integral_v); auto result = T::mul_id(); while (n) { if (n & 1) { result *= a; } a *= a; n >>= 1; } return result; }