C++ Library for Competitive Programming
#include "emthrm/math/mod_pow.hpp"
累乗を高速に求めるアルゴリズムである。
$O(\log{N})$
名前 | 戻り値 |
---|---|
long long mod_pow(long long x, long long n, const int m); |
$x^n \bmod{m}$ |
https://onlinejudge.u-aizu.ac.jp/solutions/problem/NTL_1_B/review/4088294/emthrm/C++14
#ifndef EMTHRM_MATH_MOD_POW_HPP_
#define EMTHRM_MATH_MOD_POW_HPP_
namespace emthrm {
long long mod_pow(long long x, long long n, const int m) {
if ((x %= m) < 0) x += m;
long long res = 1;
for (; n > 0; n >>= 1) {
if (n & 1) res = (res * x) % m;
x = (x * x) % m;
}
return res;
}
} // namespace emthrm
#endif // EMTHRM_MATH_MOD_POW_HPP_
#line 1 "include/emthrm/math/mod_pow.hpp"
namespace emthrm {
long long mod_pow(long long x, long long n, const int m) {
if ((x %= m) < 0) x += m;
long long res = 1;
for (; n > 0; n >>= 1) {
if (n & 1) res = (res * x) % m;
x = (x * x) % m;
}
return res;
}
} // namespace emthrm