cp-library

C++ Library for Competitive Programming

View the Project on GitHub emthrm/cp-library

:heavy_check_mark: 繰り返し二乗法 / 二分累乗法 / バイナリ法
(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}$

参考文献

Submissons

https://onlinejudge.u-aizu.ac.jp/solutions/problem/NTL_1_B/review/4088294/emthrm/C++14

Required by

Verified with

Code

#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
Back to top page