概要 「Python で競技プログラミングをやる」の文脈で、高速フーリエ変換を使うための基礎知識を整理します。 高速フーリエ変換自体は競技プログラミング以外の文脈でも重要なアルゴリズムですが、そうした需要に応えることは、本記事では想定していません。 高速フーリエ変換の詳しいアルゴリズムにはこの記事では触れません(既存の解説が多数ありますし)。代わりにフーリエ変換についての基礎知識について、少し整理しました。ここは、使用言語に関係しない部分です。 最低限、Python での実装だけ見たい人は大部分を飛ばしてよいと思います。 フーリエ変換の性質 フーリエ変換の定義 詳しくは、本記事では扱いません。 $K$ を $1$ の $n$ 乗根を $n$ 個持つ体とします(競プロの文脈だと、$K=\C$ および $K=\F_p$ が重要です)。 $K$ に値を持つ数列 $A = (a_0,a_1,\ld
![[数学・numpy] 高速フーリエ変換(FFT)による畳み込み | maspyのHP](https://cdn-ak-scissors.b.st-hatena.com/image/square/d3b83cb0b151f85f4ab582d54745629884ec04db/height=288;version=1;width=512/https%3A%2F%2Fmaspypy.com%2Fwp-content%2Fuploads%2F2023%2F01%2F5Dth6Yjz_400x400.jpg)