algo — C++23 日本語リファレンス GitHub

middle_product

関数 · NTT・畳み込み (convolution)

template <internal::static_modint_c mint>
std::vector<mint> middle_product(const std::vector<mint> &a, const std::vector<mint> &b);

概要

middle product / 転置乗算(modint 版)

a(長さ $n$)と b(長さ $m \le n$)に対し $c_i = \sum_j a_{i+j} b_j$ ($i = 0, \ldots, n-m$)を返す(長さ $n-m+1$)。a と $\mathrm{rev}(b)$ のフル積の 中央部に等しく、変換長が $\mathrm{bit\_ceil}(n)$ で済む。多項式補間・分割統治など 「ずらし内積」が要る場面で使う。

テンプレートパラメータ

名前 説明
mint NTT-friendly な static modint

パラメータ

名前 説明
a 長さ $n$ の係数列
b 長さ $m$($m \le n$)の係数列

戻り値

std::vector<mint> $c_i = \sum_j a_{i+j} b_j$(長さ $n-m+1$)

計算量

関連項目

参照