Last updated:2018-03-31 04:16:51
Category:数学, Tag: FFT


概要


列$a$,$b$について,$a$,$b$を畳み込んで次の列$c$を作る:

\[c_k = \sum_{i=0}^k a_i b_{k-i}\]

計算量


$N$を$\max(|a|, |b|)$より大きい$2$ベキの数として,$O(N\log N)$.

使い方


FFTはdouble型の演算を行うため誤差に注意
$m_a:=\max(a), m_b:=\max(b), n:=\min(|a|, |b|)$として,
$m_a m_b n \leq 2^{53}$が限度.

// 列a, bを用意
std::vector<int> a, b;

// a,bを畳み込んだ結果をcとする
std::vector<int> c(FFT::mul(a, b));

実装例


以下は非再帰,not-in-placeの実装.

問題例


参考文献