Skip to content

组合数 ​

(nm)=(n−1m)+(n−1m−1)(nm)=(nn−m)∑i=0n(ni)=2n∑i=1ni(ni)=n2n−1∑i=0k(n+ii)=(n+k+1k)(n+1k+1)=∑i=0n(ik)∑i=0k(ni)(mk−i)=(n+mk)

卡特兰数 ​

Hn=(2nn)n+1Hn={∑i=1nHi−1Hn−in≥21n=0,1Hn=4n−2n+1Hn−1Hn=(2nn)−(2nn−1)

斯特林数 ​

第一类斯特林数 ​

存在 k 个置换环的大小为 n 的置换:[nk]

约定 [00]=1;当 n>0 时 [n0]=0,当 k<0 或 k>n 时取 0。

递推公式 ​

[nk]=[n−1k−1]+(n−1)×[n−1k]

性质式 ​

n!=∑i=0n[ni]xn―=∑i=0n[ni](−1)n−ixi

第二类斯特林数 ​

n 个有标号的球分配到 k 个无标号的盒子的方案数:{nk}

约定 {00}=1;当 n>0 时 {n0}=0,当 k<0 或 k>n 时取 0。

递推公式 ​

{nk}={n−1k−1}+k×{n−1k}

性质式 ​

xn=∑i=0n{ni}xi―

特别地:

∑i=0nik=∑i=0k{ki}(n+1)i+1―i+1

斐波那契数列 ​

定义 fi={0i=01i=1fi−1+fi−2i≥2 的数列为斐波那契数列。

通项公式: ​

fn=(1+52)n−(1−52)n5

若 5 在给定模数模意义下存在二次剩余,结合二次剩余和逆元可在 O(log⁡n) 时间求解 fn。

注:常见模数 109+7 和 998244353,对 5 不存在二次剩余。109+9 对 5 存在二次剩余,解为:383008016,616991993。

倍增: ​

f2k=fk(2fk+1−fk),f2k+1=fk+12+fk2

根据奇偶性递推 fn 即可。

时间复杂度:O(log⁡n),常数较小。

矩阵递推: ​

[fn−1,fn]=[fn−2,fn−1]×[0111]

令 p=[0111],[fn,fn+1]=[f0,f1]×pn

利用矩阵快速幂,可在 O(23×log⁡n) 的时间计算 fn。

预处理 2i 矩阵,可将询问转换成向量乘矩阵,矩乘满足结合律,时间复杂度:O(22×log⁡n)。

性质 ​

  • fn−1fn+1−fn2=(−1)n
  • fn+k=fkfn+1+fk−1fn,特别地 f2n=fn(fn+1+fn−1)
  • gcd(fa,fb)=fgcd(a,b),其中 a,b≥1
  • n≥1,k≥0→fn∣fnk
  • 由 gcd 恒等式可得,当 a≥3,b≥1 时,fa∣fb⇔a∣b;a=1,2 时 fa=1,会整除任意 fb,上述等价关系不再普遍成立

模意义下的周期性 ​

记斐波那契数列模 m 的最小正周期为 π(m)。正整数 T 是它的一个周期,当且仅当 (fT,fT+1)≡(0,1)(modm)。

令模数为 m,斐波那契数列的最小正周期不超过 6m。

模数较小时暴力枚举求周期即可。

斐波那契数列模 2 的最小正周期是 3,模 5 的最小正周期是 20。

对于奇素数 p≡1,4(mod5),p−1 是斐波那契数列模 p 的周期。

对于奇素数 p≡2,3(mod5),2p+2 是斐波那契数列模 p 的周期。

上面给出的是候选周期,不一定是最小周期。可以分解候选周期,并依次尝试约去质因子;使用 (fT,fT+1)≡(0,1)(modp) 检验,得到 π(p)。

对于素数幂,若 k≥2 且 M=π(pk−1),则 pM 是模 pk 的一个候选周期,且

M∣π(pk)∣pM.

因此 π(pk) 只能是 M 或 pM。需要先检验 M 在模 pk 下是否仍为周期,不能无条件认为最小周期每层都恰好乘 p。

令 m=∏piai,逐层求出每个最小周期 π(piai) 后,根据中国剩余定理有

π(m)=lcmi⁡π(piai).

错位排列 ​

定义 Dn 表示满足 pi≠i 的 n 元排列数量,并约定 D0=1。

Dn=n!∑i=0n(−1)ii!Dn=nDn−1+(−1)n(n≥1)

指数生成函数 ​

D(x)=∑n≥0Dnxnn!=exp(−ln⁡(1−x)−x)

贝尔数 ​

定义 Bn 表示把大小为 n 的集合划分成若干非空子集的方案数,并约定空集只有一种划分,即 B0=1。

Bn+1=∑i=0n(ni)Bi(n≥0)Bn=∑i=0n{ni}(n≥0)

贝尔三角形 ​

定义 a0,0=1。对于 n≥1,先令 an,0=an−1,n−1,再令

an,m=an,m−1+an−1,m−1(1≤m≤n),

则 Bn=an,0。

指数生成函数 ​

B(x)=∑n≥0Bnxnn!=exp(ex−1)

欧拉数 ​

定义 E(n,m) 表示 n 元排列中恰好有 m 个上升位置的排列数量,即恰好有 m 个 i∈[1,n−1] 满足 pi<pi+1。

递推式: ​

E(n,m)={1n=0∧m=00m<0∨(n=0∧m≠0)∨(n≥1∧m≥n)(n−m)E(n−1,m−1)+(m+1)E(n−1,m)n≥1,0≤m<n

分拆数 ​

定义 p(n,k) 表示 n=∑i=1kri 且 r1≥r2≥⋯≥rk≥1 的方案数。约定 p(0,0)=1,下标越界时取 0,则 pn=∑k=0np(n,k),特别地 p0=1。

分拆数增长率相对不大:

  • pn≤2×105,n≤50
  • pn≤106,n≤60
  • pn≤5×106,n≤70

普通生成函数:

P(x)=∑n=0∞pnxn=∏i=1∞(1−xi)−1=exp(−∑i=1∞ln⁡(1−xi))=exp(∑i=1∞∑j=1∞xijj)=exp(∑n=1∞σ1(n)nxn).

其中 σ1(n)=∑d∣nd 表示 n 的正因数之和。

性质: ​

设 pn(k) 是最大部分为 k 的 n 的分拆数量,qn(k) 是恰好 k 个部分的分拆数量。

pn(k)=qn(k)

根据此性质,求 p(n) 时可以根据拆分出 ri 的大小根号分治,时间复杂度:O(nn)。

设 pno 是把 n 分拆成若干奇数部分的方案数,pnd 是把 n 分拆成若干互不相同部分的方案数。

pno=pnd

五边形数定理: ​

Euler 五边形数定理给出

Φ(x)=∏i=1∞(1−xi)=1+∑k=1∞(−1)k(xk(3k−1)/2+xk(3k+1)/2).

令

gk−=k(3k−1)2,gk+=k(3k+1)2(k≥1),

二者称为广义五边形数。其指数依次为 1,2,5,7,12,15,…,在 Φ(x) 中的符号按 −,−,+,+,… 成对出现。

由于 P(x)=Φ(x)−1,比较 P(x)Φ(x)=1 的 xn 系数,并约定 p0=1、pn=0 (n<0),可得

pn=∑k=1∞(−1)k−1(pn−gk−+pn−gk+).

递推中的符号按 +,+,−,−,… 成对出现。因为 gk±=Θ(k2),对每个 n 只有 O(n) 个有效项,计算 p0,…,pn 的时间复杂度为 O(nn)。