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

kitamasa

関数 · きたまさ法(任意可換環版、$O(k^2 \log n)$)

template <class T>
T kitamasa(const std::vector<T> &a, const std::vector<T> &d, std::int64_t n);

概要

きたまさ法(任意可換環版、$O(k^2 \log n)$)

線形漸化式 $a_i = \sum_{j=1}^{k} d_j a_{i-j}$($i \ge k$)の第 $n$ 項を、 特性多項式 $f(x) = x^k - \sum_j d_j x^{k-1-j}$ を法とした $x^n \bmod f$ の 二乗法で求める。任意の可換環 T に対応(NTT 非対応 mod・dynamic_modint・ 行列・有理数など畳み込みできない環でも可)。NTT-friendly な static_modint で $O(M(k) \log n)$ が欲しい場合は同ファイルの kth_term を使う。

テンプレートパラメータ

名前 説明
T 可換環(加減乗算と T(0)/T(1) を持つ)

パラメータ

名前 説明
a 初項 $a_0, \ldots, a_{k-1}$
d 漸化式の係数 $d_1, \ldots, d_k$($a_i = d_1 a_{i-1} + \cdots + d_k a_{i-k}$)
n 求める項の番号

戻り値

T $a_n$

計算量

関連項目