Exp of Set Power Series(集合冪級数の指数関数)

集合冪級数fの指数関数を計算します。

一般形

let result =
  expOfSetPowerSeries(
    f
  )

引数

長さが2^kの配列では、添字maskをk要素集合の部分集合として 扱います。

前提条件

f[0]は空集合の係数です。

条件を満たさない場合はValueErrorを送出します。

返り値

返り値は入力と同じ長さのseq[T]です。

空集合について、

result[0] = 1

です。

空でない集合Sについて、result[S]はSの集合分割全体にわたる

product f[block]

の和です。

入力fは変更しません。

具体例

import atcoder/modint
import atcoder/extra/math/exp_of_set_power_series

type mint = modint998244353

let f = @[
  mint.init(0),
  mint.init(2),
  mint.init(3),
  mint.init(5),
]

let result =
  expOfSetPowerSeries(
    f
  )

doAssert result == @[
  mint.init(1),
  mint.init(2),
  mint.init(3),
  mint.init(11),
]

最後の係数は、

f[{0,1}] + f[{0}] * f[{1}]
= 5 + 2 * 3
= 11

です。

関連API

expOfSetPowerSeriesは内部で段階的にsubsetConvolutionを使用します。

計算量

入力長を2^kとすると、