Skip to the content.

:heavy_check_mark: 複数の要素の逆元を一括で計算
(modint/multi-inverse.hpp)

Required by

Verified with

Code

#pragma once

template <class mint>
vector<mint> MultiInverse(const vector<mint>& a) {
  if (a.empty()) return {};
  vector<mint> b(a.begin(), a.end());
  for (int i = 0; i + 1 < b.size(); i++) b[i + 1] *= b[i];
  mint c = b.back().inv();
  for (int i = a.size() - 1; i > 0; i--) {
    b[i] = c * b[i - 1];
    c *= a[i];
  }
  b[0] = c;
  return b;
}
/**
 * @brief 複数の要素の逆元を一括で計算
 */
#line 2 "modint/multi-inverse.hpp"

template <class mint>
vector<mint> MultiInverse(const vector<mint>& a) {
  if (a.empty()) return {};
  vector<mint> b(a.begin(), a.end());
  for (int i = 0; i + 1 < b.size(); i++) b[i + 1] *= b[i];
  mint c = b.back().inv();
  for (int i = a.size() - 1; i > 0; i--) {
    b[i] = c * b[i - 1];
    c *= a[i];
  }
  b[0] = c;
  return b;
}
/**
 * @brief 複数の要素の逆元を一括で計算
 */
Back to top page