斯特林数

第一类斯特林数

第一类斯特林数为有$k$个轮换的$n$元置换的方案数,表示为$\begin{bmatrix}n\\m\end{bmatrix}$或$c(n,m)$。
递推公式

重要公式

有符号第一类斯特林数:$S_1(n,k)=(-1)^{n+k}\begin{bmatrix}n\\k\end{bmatrix}$
满足

关于$n$的指数生成函数

快速计算一行可以利用重要公式进行计算,显然我们只需要求$x^{\overline{n}}$,观察$\prod\limits_{i=L}^{R}(x+i)$,其中$R-L+1$为偶数,显然可以将其分成两个长度相同的部分,设左半部分为$f(x)=\sum_{n\ge0}a_nx^n$则右半部分为$f(x+d),d=\dfrac{R-L+1}{2}$,则有

设$A_n=n!a_nx^n,B_n=\dfrac{d^{n}}{n!}x^{-n}$,则有

很明显的卷积形式,直接FFT/NTT/MTT求解即可。

快速计算一列直接用指数生成函数解决。

第二类斯特林数

第二类斯特林数为将$n$个有标号的球分配到$k$个无标号的盒子的方案数,记为$S_2(n,k)$或$\begin{Bmatrix}n\\m\end{Bmatrix}$。
递推公式

通项公式(容斥)

重要公式

关于$n$的指数生成函数

快速计算一行可以利用通项公式计算,式子化为

明显的卷积形式,用FFT/NTT/MTT求解。

快速计算一列可以利用生成函数计算,直接求多项式快速幂即可。

斯特林反演

两类斯特林数之间的联系:

斯特林反演:
如果数列$f,g$满足$f_n=\sum\limits_{i=0}^nS_2(n,i)g_i$,则$g_n=\sum\limits_{i=0}^nS_1(n,i)f_i$,反之也成立。

整数分拆

将$n$个无标号的球分配到$k$个无标号的盒子中的方案数,记为$p(n,k)$。
递推公式

关于$n$的常生成函数

根据常生成函数,可以快速计算$k$相同的$p(n,k)$,对上面的式子取$\ln$,得到

将上式取$\exp$再乘上$x^k$就得到了他的形式幂级数。

将$n$个无标号的球分配到一些无标号盒子的方案数记为$p(n)$。
显然有

递推公式

常生成函数

同样可以通过先取$\ln$再用$\exp$还原的方法$O(n\log n)$计算,利用递推式直接计算是$O(n\sqrt{n})$的。