Luogu P5748 集合划分计数 题解
Description
定义 \(b_n\) 为将有 \(n\) 个集合的元素划分为任意个无序非空子集的方案数(贝尔数),求 \(b_n\bmod {998244353}\)。
多测。
\(1\le n\le 10^5\),\(T=10^3\)。
Solution
发现 \(b_n\) 实际上是一行第二类斯特林数的和,而对于斯特林数 \(\begin{Bmatrix} n \\ k\end{Bmatrix}\),有通项公式:
\[\begin{Bmatrix} n \\ k\end{Bmatrix}=\sum_{r=1}^k(-1)^{k-r}\dfrac{r^n}{(k-r)!r!}
\]
注意到当 \(k>n\) 时,\(\begin{Bmatrix} n \\ k\end{Bmatrix}=0\),所以我们可以假定一个大于 \(n\) 的整数 \(M\),有
\[\begin{aligned}
b_n&=\sum_{k=1}^M\sum_{r=1}^k(-1)^{k-r}\dfrac{r^{n-1}}{(k-r)!(r-1)!}\\
&=\sum_{r=1}^M\dfrac{r^{n-1}}{(r-1)!}\sum_{k=r}^M\dfrac{(-1)^{k-r}}{(k-r)!}
\end{aligned}
\]
因为 \(M\) 可以取任意比 \(n\) 大的整数,我们令 \(M\to+\infty\),有
\[b_n=\dfrac{1}{{\rm e}}\sum_{r\ge 0}\dfrac{r^n}{r!}
\]
我们考虑贝尔数的 EGF \(B(z)\),有:
\[\begin{aligned}
B(z)-1&=\sum_{k\ge 1}\dfrac{b_k}{k!}z^k\\
&=\dfrac{1}{\mathrm{e}}\sum_{k\ge 1}\dfrac{z^k}{k!}\sum_{r\ge 1}\dfrac{(r-1)^k}{(r-1)!}\\
&=\dfrac{1}{\mathrm{e}}\sum_{r\ge 1}\dfrac{1}{r!}\sum_{k\ge 1}\dfrac{(zr)^k}{k!}\\
&=\dfrac{1}{\mathrm{e}}\sum_{r\ge 1}\dfrac{\mathrm{e}^{rz}-1}{r!}\\
&=\dfrac{1}{\mathrm{e}}(\mathrm{e}^{\mathrm{e}^z}-\mathrm{e})\\
&=\mathrm e^{\mathrm e^z-1}-1
\end{aligned}
\]
即 \(B(z)=\mathrm{e}^{\mathrm e^z-1}\),算一遍 \(\exp\) 即可。
时间复杂度:\(\mathcal O(n\log n)\)。