斯特林数

【基本概念】

第一类斯特林数:[nk]:把 n 个数放入 k 个环中,本质不同的方案数。(要求每个环非空,环之间不区分,环可旋转)

递推公式:[nk]=(n1)[n1k]+[n1k1]

第一类斯特林数没有通项公式。

k=0n[nk]=n!

第二类斯特林数:{nk}:把 n 个数放入 k 个盒中,本质不同的方案数。(非空,盒之间不区分)

递推公式:{nk}=k{n1k}+{n1k1}

通项公式:{nk}=1k!t=0k(1)t(kt)(kt)n

【斯特林数与上下阶乘幂】

可以用斯特林数来让普通次幂和 上、下阶乘幂 转化。

普通转下:xn=k=1n{nk}xk

普通转上:xn=k=1n(1)nk{nk}xk

上转普通:xn=k=1n[nk]xk

下转普通:xn=k=1n(1)nk[nk]xk

【快速求某行列斯特林数】

【重要的引理】

引理:如果 p 是质数,则 xp=xpx(modp)

注意 xp=k=1p[pk]xk,比较系数,可知引理与这个命题等价[p1]=1,[pp]=1,[p2p1]=0

[p1] 等于 p 个数的圆排列 (p1)!,由威尔逊定理知 (p1)!=1(modp)

[pp] 只能每个环一个,方案数 =1

s(x)=xpf(x)=xpx 这两个多项式。显然 x=0p1s(x)=0;由费马小定理,x=0p1xpx(modp),所以 f(x)x=0p1 也等于 0

观察 G(x)=s(x)f(x),因为 xp(xpx)xp 项消去了,所以 degG(x)<p。但是由上面我们知道 G(x)0p1p 个零点。由拉格朗日定理知 G(x)=0s(x)=f(x)(modp)

【快速求】

如果 n 比较小直接上递推公式了。

【行】

  1. [n0n],转求 xn 的系数。

    fn(x)=xn,则 f2n(x)=fn(x)+fn(x+n)。先递归求出 fn/2(x),然后多项式平移。

  2. {n0n}

    法一:因为 xn={ni}xi,可以转求 xn 的下降幂表示,O(nlog2n)

    法二:用到通项公式 {nk}=1k!t=0k(1)t(kt)(kt)n

    t=0k(1)t(kt)(kt)n=t=0k(1)tt!(kt)n(kt)!

    标准形式 FFT,卷出来之后记得 ×1k!

【列】

  1. 第一类。n 个数放入一个圆排列,[n1]=(n1)!。考虑它关于 n 的 EGF:n>0[n1]xnn!=b>0xnn.

    记为 A^(x)。根据 EGF 相关知识可得,放入 k 个圆排列的 EGF 是 1k!(A^(x))k。用多项式快速幂即可。

  2. 第二类。n 个数放入一个盒子的方案数是 11 的 EGF 是 sumn>0xnn!=ex1k 个盒子就是 1k!(ex1)k

【题目】

CF932E

(in)ik=i=1n(in)j=1k{jk}ij=i=1n(in)j=1min(k,i){jk}(ji)j!=j=1min(k,n)j!{jk}i=jn(in)(ji).

这里用一下这个:(in)(ji)=(jn)(ijnj).

...=j=1min(k,n)j!(jn){jk}i=jn(ijnj)=j=1min(k,n)j!(jn){jk}2nj

min(k,n)5000,就相当于 5000 个数求和。

j!,(jn),2nj 都可以预处理出来。(注意这里 j 的范围很小)

{kj} 第二类斯特林数我们直接用递推公式,O(k2) 预处理。

斯特林

问:1n 的置换,有偶数个环 计数。

即求 k0(mod2)[kn]

解:xn=k=1n[kn]xk

x 代入 1,1 可以消掉奇数次幂项。

posted @   FLY_lai  阅读(166)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示