競技プログラミングでは、フーリエ変換やゼータ変換などを使って畳みこみの計算を行うことがしばしばありますが、こういった○○変換で畳みこみの計算ができる直感的なお気持ちを最近ようやくわかった気になったので、その勝手な解釈を文章にまとめました。 読みにくいところやいい加減なところがありますが、ご容赦ください。 畳みこみについて 集合 上の 項演算 があって、 与えられた つの 次元ベクトル から、 となる新たな 次元ベクトル を作る操作を、ここでは「畳みこみ」と呼び、 で表します。 演算 として、 などの場合が競プロにしばしば登場します。 ただし、 はbitwise-AND、 はbitwise-OR、 はbitwise-XORを表します。 の場合は、 を次の手順で計算できます。 まず、 と それぞれに離散フーリエ変換を行って、 つの 次元ベクトル を得ます。 次に、 と の各点積、つまり、 を計