M5NEQE3XDVAU5ETSVN7L3QTZFMF5UQ6WHMQ32NYYRIBOR7M4ME7QC
SFOMVQ7IW3I6GG23LN2KRECQV3XB5ZOC3AAOK3BS7AVJM4KMLMXQC
C7Y67X3DJBDM4QW3NAVSVJF6GSSLD466S4FFJSIKUEJANLPC6FIAC
DGEGTDYVGRHEGNFDHCCVTD6AVLRJ2XHDXQPWR5MMR62V5NU2XGIQC
DQZRKU4B6C3WWWXFMBBSVKYD5AXDGUMHHPACVWKERGKB5WLHZGYAC
template <typename T> constexpr T pown(const T x, const int n0) { if (n0 < 0) return 1 / pown(x, -n0); T r{1}; int n{n0}; // while (n) { // // invariant: x^n0 = r * x^n // r *= x; // --n; // } T y{x}; while (n) { if (n & 1) r *= y; y *= y; n >>= 1; } return r;}
template <typename T> constexpr T pown(const T x, const int n0) {
if (n0 < 0)
return 1 / pown(x, -n0);
T r{1};
int n{n0};
// while (n) {
// // invariant: x^n0 = r * x^n
// r *= x;
// --n;
// }
T y{x};
while (n) {
if (n & 1)
r *= y;
y *= y;
n >>= 1;
}
return r;
auto f = [&](T x) { return order == 0 ? T(1) : pow(x, order); };
auto f = [&](T x) { return pown(x, order); };
// return (order + 1) * (order == 0 ? T(1) : pow(x, order));
// return (order + 1) * pown(x, order);
const auto fint{[&](T x) { return pow(x, order + 1); }};
const auto fint{[&](T x) { return pown(x, order + 1); }};