第一类斯特林数
第一类斯特林数为有$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})$的。