读完这篇博客,您的生成函数水平将会到达入门前(即还没有入门但是有概念)的水平。本文只会提到 OGF 和 EGF。因为 DGF(迪利克雷生成函数)很多内容于数论重叠,后续补充数论内容大概率会写,不想重复写(其实就是现在不会),当然还有一些比如概率生成函数之类这里更加没有提及。
普通生成函数(OGF)。
指数生成函数(EGF)。
本文约定 :对于任意实数 x x x ,x 0 = 1 x^0=1 x 0 = 1 ,包括 x = 0 x=0 x = 0 。
简介
生成函数 (generating function)又称为“母函数”,是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。
本博客的行文思路和引导例题大多也借鉴(copy )了 OI-wiki。
一般来说,生成函数可以表示为这样的形式:
F ( x ) = ∑ i a i k i ( x ) F(x) = \sum_i a_ik_i(x)
F ( x ) = i ∑ a i k i ( x )
其中 k i ( x ) k_i(x) k i ( x ) 为核函数 。不同的核函数可以得到不同的生成函数,a i a_i a i 为系数序列。使用 [ k n ( x ) ] F ( x ) [k_n(x)]F(x) [ k n ( x ) ] F ( x ) (可能会直接写成 [ x n ] F ( x ) [x^n]F(x) [ x n ] F ( x ) ,不管核函数是不是 k i ( x ) = x i k_i(x)=x^i k i ( x ) = x i )表示第 n n n 项系数,即 a n a_n a n 。
系数序列既可以是有限序列,也可以是无穷序列。
普通生成函数
核函数 k i ( x ) = x i k_i(x) = x^i k i ( x ) = x i 时,得到的生成函数叫普通生成函数 ,简称 OGF 。一个普通生成函数的形式幂级数可以写成下面这个样子:
F ( x ) = ∑ i a i x i F(x) = \sum_i a_ix^i
F ( x ) = i ∑ a i x i
下面我们考虑一个封闭的 OGF 如果转化为封闭形式。以 a = ⟨ 1 , 3 , 9 , 27 , 81 , ⋯ ⟩ a=\left\langle1,3,9,27,81,\cdots\right\rangle a = ⟨ 1 , 3 , 9 , 2 7 , 8 1 , ⋯ ⟩ 为例子(等比数列),其 OGF 为:
F ( x ) = ∑ i ≥ 0 3 i x i F(x) = \sum_{i\geq 0} 3^ix^i
F ( x ) = i ≥ 0 ∑ 3 i x i
发现这个函数有这样的性质:
3 x F ( x ) + 1 = F ( x ) 3xF(x)+1=F(x)
3 x F ( x ) + 1 = F ( x )
因此:
F ( x ) = 1 1 − 3 x F(x) = \frac{1}{1-3x}
F ( x ) = 1 − 3 x 1
这就是原生成函数的封闭形式。类似的,我们能得到等比数列生成函数的封闭形式 F ( x ) = 1 1 − p x F(x) = \frac{1}{1-px} F ( x ) = 1 − p x 1 ,其中 p p p 为公比。再类比一下,求 ∑ i ≥ n p i x i \sum_{i\geq n} p^ix^i ∑ i ≥ n p i x i 的封闭形式?
p x F ( x ) + p n x n = F ( x ) pxF(x)+p^nx^n = F(x)
p x F ( x ) + p n x n = F ( x )
因此有:
F ( x ) = ∑ i ≥ n p i x i = p n x n 1 − p x F(x) = \sum_{i\geq n} p^ix^i = \frac{p^nx^n}{1-px}
F ( x ) = i ≥ n ∑ p i x i = 1 − p x p n x n
这个式子非常有用,请务必牢记。
写出序列 a = ⟨ 0 , 1 , 0 , 1 , ⋯ ⟩ a=\left\langle0,1,0,1,\cdots\right\rangle a = ⟨ 0 , 1 , 0 , 1 , ⋯ ⟩ 的生成函数的幂级数形式和封闭形式。
不难发现实际上就是只有 x x x 的奇数次幂,所以很容易写出其形式幂级数写法:
F ( x ) = ∑ i ≥ 0 x 2 i + 1 F(x) = \sum_{i\geq 0} x^{2i+1}
F ( x ) = i ≥ 0 ∑ x 2 i + 1
因此 x 2 F ( x ) + x = F ( x ) x^2F(x) +x=F(x) x 2 F ( x ) + x = F ( x ) ,因此:
F ( x ) = x 1 − x 2 F(x) = \frac{x}{1-x^2}
F ( x ) = 1 − x 2 x
写出序列 a n = ( m n ) a_n=\binom{m}{n} a n = ( n m ) 的生成函数的幂级数形式和封闭形式。
用二项式定理即可:
F ( x ) = ∑ i ≥ 0 ( m i ) x i = ( x + 1 ) m F(x) = \sum_{i\geq 0} \binom{m}{i} x^i = (x+1)^m
F ( x ) = i ≥ 0 ∑ ( i m ) x i = ( x + 1 ) m
当然只知道封闭形式用处不大,我们还需要转化。注意这里的转化可能仍然是一个封闭形式。一个生成函数的封闭形式可能有多个,而另一个就能由某一个转化得到,例如……
写出序列 a = ⟨ 0 , 1 , 1 , 2 , 3 , 5 , 8 , 13 , ⋯ ⟩ a=\left\langle0,1,1,2,3,5,8,13,\cdots\right\rangle a = ⟨ 0 , 1 , 1 , 2 , 3 , 5 , 8 , 1 3 , ⋯ ⟩ 即斐波那契的生成函数。
根据递推式 a n = a n − 1 + a n − 2 a_n = a_{n-1} + a_{n-2} a n = a n − 1 + a n − 2 :
F ( x ) = x F ( x ) + x 2 F ( x ) + x F(x) = xF(x) + x^2F(x) +x
F ( x ) = x F ( x ) + x 2 F ( x ) + x
如何理解这个式子?
实际上,函数乘上一个 x x x 相当于各项系数向右移动一位,乘上 x 2 x^2 x 2 同理。直接求和发现少了一个系数 1 1 1 ,也就是边界系数,需要加上 x x x 。
根据这个式子获得封闭形式 F ( x ) = x 1 − x − x 2 F(x)= \frac{x}{1-x-x^2} F ( x ) = 1 − x − x 2 x 。下面考虑如何把这个玩意转化。回想到等差数列的封闭形式,用待定系数法构造等差数列:
A 1 − a x + B 1 − b x = x 1 − x − x 2 \frac{A}{1-ax}+\frac{B}{1-bx} = \frac{x}{1-x-x^2}
1 − a x A + 1 − b x B = 1 − x − x 2 x
不难得到:
{ A + B = 0 A b + a B = − 1 a + b = 1 a b = − 1 \begin{cases}
A+B = 0 \\
Ab+aB = -1 \\
a+b = 1 \\
ab=-1
\end{cases}
⎩ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎧ A + B = 0 A b + a B = − 1 a + b = 1 a b = − 1
解这个方程是简单的,解得 A = 5 5 , B = − 5 5 , a = 1 + 5 2 , b = 1 − 5 2 A=\frac{\sqrt 5}{5},B=-\frac{\sqrt 5}{5},a=\frac{1+\sqrt 5}{2},b=\frac{1-\sqrt 5}{2} A = 5 5 , B = − 5 5 , a = 2 1 + 5 , b = 2 1 − 5 。然后再利用等比数列的展开式,就可以得到斐波那契数列的另一个封闭形式。具体展开比较复杂无趣这里不展开(其实就是懒得推直接摆结论算了 )。
F ( x ) = ∑ n ≥ 0 x n 5 5 [ ( 1 + 5 2 ) n − ( 1 − 5 2 ) n ] F(x) = \sum_{n\geq 0} x^n \frac{\sqrt 5}{5} \left[ \left(\frac{1+\sqrt 5}{2}\right)^n - \left(\frac{1-\sqrt 5}{2}\right)^n \right]
F ( x ) = n ≥ 0 ∑ x n 5 5 [ ( 2 1 + 5 ) n − ( 2 1 − 5 ) n ]
不难发现这就是我们常看到 的斐波那契数列通项公式。
写出任意数列 f f f (生成函数为 F F F )的前缀和的数列的生成函数 S S S 。
S ( x ) = ∑ n ≥ 0 x n ∑ i = 0 n f i = ∑ i ≥ 0 a i ∑ n ≥ i x n = ∑ i ≥ 0 a i x i 1 − x = 1 1 − x F ( x ) \begin{aligned}
S(x) &= \sum_{n\geq 0} x^n \sum_{i=0}^n f_i \\
&= \sum_{i\geq 0} a_i\sum_{n\geq i} x^n \\
&= \sum_{i\geq 0} a_i \frac{x^i}{1-x} \\
&= \frac{1}{1-x} F(x)
\end{aligned}
S ( x ) = n ≥ 0 ∑ x n i = 0 ∑ n f i = i ≥ 0 ∑ a i n ≥ i ∑ x n = i ≥ 0 ∑ a i 1 − x x i = 1 − x 1 F ( x )
因此一个数列前缀和的生成函数就是原数列生成函数乘 1 1 − x \frac{1}{1-x} 1 − x 1 。
写出卡特兰数的生成函数。卡特兰数的定义为 c n = ∑ i = 0 n − 1 c i c n − i − 1 c_n = \sum_{i=0}^{n-1} c_ic_{n-i-1} c n = ∑ i = 0 n − 1 c i c n − i − 1 ,边界 c 0 = 1 c_0=1 c 0 = 1 。
不难发现 n > 0 n>0 n > 0 的情况其实就是这个生成函数和自己的卷积:
C ( x ) = 1 + x C 2 ( x ) C(x) = 1+xC^2(x)
C ( x ) = 1 + x C 2 ( x )
解出:
C ( x ) = 1 ± 1 − 4 x 2 x C(x) = \frac{1\pm\sqrt{1-4x}}{2x}
C ( x ) = 2 x 1 ± 1 − 4 x
问题在于,这个符号到底取正还是取负?不妨考虑把分子有理化:
C ( x ) = 2 1 ∓ 1 − 4 x C(x) = \frac{2}{1\mp\sqrt{1-4x}}
C ( x ) = 1 ∓ 1 − 4 x 2
(注意分母的正负和分子的正负是反的)若分母符号取负,当 x = 0 x=0 x = 0 代入时,结果为 2 0 \frac{2}{0} 0 2 无意义;分母取正,当 x = 0 x=0 x = 0 代入时为 2 2 = 1 \frac{2}{2}=1 2 2 = 1 符合题意。因此分母应该取正,也就是分子取负。
C ( x ) = 1 − 1 − 4 x 2 x C(x) = \frac{1-\sqrt{1-4x}}{2x}
C ( x ) = 2 x 1 − 1 − 4 x
然后考虑将其转化。从这个根号开始,用广义二项式定理暴力拆:
1 − 4 x = ∑ i ≥ 0 ( 1 2 i ) ( − 4 x ) i = 1 − ∑ i ≥ 1 1 × 3 × 5 × ⋯ × ( 2 i − 3 ) i ! ( 2 x ) i = 1 − ∑ i ≥ 1 ( 2 i − 2 ) ! i ! × 2 × 4 × 6 × ⋯ × ( 2 i − 2 ) 2 i x i = 1 − ∑ i ≥ 1 ( 2 i − 2 ) ! i ! ( i − 1 ) ! 2 x i \begin{aligned}
\sqrt{1-4x} &= \sum_{i\geq 0} \binom{\frac{1}{2}}{i} (-4x)^i \\
&= 1 - \sum_{i\geq 1} \frac{1\times3\times5\times\cdots\times(2i-3)}{i!}(2x)^i \\
&= 1 - \sum_{i\geq 1} \frac{(2i-2)!}{i!\times 2\times 4\times 6\times\cdots\times(2i-2)} 2^ix^i \\
&= 1- \sum_{i\geq 1} \frac{(2i-2)!}{i!(i-1)!} 2x^i
\end{aligned}
1 − 4 x = i ≥ 0 ∑ ( i 2 1 ) ( − 4 x ) i = 1 − i ≥ 1 ∑ i ! 1 × 3 × 5 × ⋯ × ( 2 i − 3 ) ( 2 x ) i = 1 − i ≥ 1 ∑ i ! × 2 × 4 × 6 × ⋯ × ( 2 i − 2 ) ( 2 i − 2 ) ! 2 i x i = 1 − i ≥ 1 ∑ i ! ( i − 1 ) ! ( 2 i − 2 ) ! 2 x i
这玩意往回代入:
C ( x ) = 1 2 x [ 1 − ( 1 − ∑ i ≥ 1 ( 2 i − 2 ) ! i ! ( i − 1 ) ! 2 x i ) ] = ∑ i ≥ 1 ( 2 i − 2 ) ! i ! ( i − 1 ! ) x i − 1 = ∑ i ≥ 0 ( 2 i ) ! i ! ( i + 1 ) ! x i = ∑ i ≥ 0 ( 2 i i ) 1 i + 1 x i \begin{aligned}
C(x) &= \frac{1}{2x}[1-(1-\sum_{i\geq 1} \frac{(2i-2)!}{i!(i-1)!}2x^i)] \\
&= \sum_{i\geq 1} \frac{(2i-2)!}{i!(i-1!)} x^{i-1} \\
&= \sum_{i\geq 0} \frac{(2i)!}{i!(i+1)!} x^i \\
&= \sum_{i\geq 0} \binom{2i}{i}\frac{1}{i+1}x^i
\end{aligned}
C ( x ) = 2 x 1 [ 1 − ( 1 − i ≥ 1 ∑ i ! ( i − 1 ) ! ( 2 i − 2 ) ! 2 x i ) ] = i ≥ 1 ∑ i ! ( i − 1 ! ) ( 2 i − 2 ) ! x i − 1 = i ≥ 0 ∑ i ! ( i + 1 ) ! ( 2 i ) ! x i = i ≥ 0 ∑ ( i 2 i ) i + 1 1 x i
这也是我们熟悉的卡特兰数通项公式 c n = ( 2 n n ) n + 1 c_n = \frac{\binom{2n}{n}}{n+1} c n = n + 1 ( n 2 n ) 。
指数生成函数
当核函数为 k n ( x ) = x n n ! k_n(x) = \frac{x^n}{n!} k n ( x ) = n ! x n 时,这玩意就变成了指数生成函数 ,简称 EGF 。其形式幂级数为:
F ( x ) = ∑ n a n x n n ! F(x) = \sum_{n} a_n \frac{x^n}{n!}
F ( x ) = n ∑ a n n ! x n
什么问题一般不用 OGF 而用 EGF?考虑计算一些东西的时候,如果物品是有顺序的(即带编号的),可能会整出来这样一个卷积:
h n = ∑ i = 0 n ( n i ) f i g n − i h_n = \sum_{i=0}^n \binom{n}{i} f_ig_{n-i}
h n = i = 0 ∑ n ( i n ) f i g n − i
这时候考虑展开组合数:
h n n ! = ∑ i = 0 n f i i ! × g n − i ( n − i ) ! \frac{h_n}{n!} = \sum_{i=0}^n \frac{f_i}{i!} \times \frac{g_{n-i}}{(n-i)!}
n ! h n = i = 0 ∑ n i ! f i × ( n − i ) ! g n − i
然后就出现了标准的指数生成函数。当然你也可以认为 a a a 的指数生成函数就是 a i i ! \frac{a_i}{i!} i ! a i 的普通生成函数。
下面依然考虑如何封闭一个 EGF。这个比 OGF 难得多。先从 a = ⟨ 1 , 1 , 1 , ⋯ ⟩ a=\left\langle1,1,1,\cdots\right\rangle a = ⟨ 1 , 1 , 1 , ⋯ ⟩ 开始:
F ( x ) = ∑ i ≥ 0 x i i ! F(x) = \sum_{i\geq 0} \frac{x^i}{i!}
F ( x ) = i ≥ 0 ∑ i ! x i
相当于在原点处把 e x e^x e x 泰勒展开。因此:
F ( x ) = e x F(x) = e^x
F ( x ) = e x
如果你不会泰勒展开,可以直接记这个东西,背一些常见的:
∑ i ≥ 0 p i x i i ! = e p x \sum_{i\geq 0} p^i \frac{x^i}{i!} = e^{px}
i ≥ 0 ∑ p i i ! x i = e p x
∑ i ≥ 0 i k ‾ x i i ! = x k e x \sum_{i\geq 0} i^{\underline k} \frac{x^i}{i!} = x^ke^x
i ≥ 0 ∑ i k i ! x i = x k e x
∑ i ≥ 0 ( i − 1 ) ! x n i ! = ln 1 1 − x \sum_{i\geq 0} (i-1)!\frac{x^n}{i!} = \ln\frac{1}{1-x}
i ≥ 0 ∑ ( i − 1 ) ! i ! x n = ln 1 − x 1
写出 a n = P n k a_n = \mathrm{P}_n^k a n = P n k 的 EGF。P \rm{P} P 为排列数。
F ( x ) = ∑ i = 0 n P n i x i i ! = ∑ i = 0 n x i n ! i ! ( n − i ) ! = ( 1 + x ) n \begin{aligned}
F(x) &= \sum_{i=0}^n \mathrm{P}_n^i \frac{x^i}{i!} \\
&= \sum_{i=0}^n \frac{x^in!}{i!(n-i)!} \\
&= (1+x)^n
\end{aligned}
F ( x ) = i = 0 ∑ n P n i i ! x i = i = 0 ∑ n i ! ( n − i ) ! x i n ! = ( 1 + x ) n
n n n 个数的圆排列为 ( n − 1 ) ! (n-1)! ( n − 1 ) ! ,因此:
Q ( x ) = ∑ i > 0 ( i − 1 ) ! x i i ! = ln 1 1 − x Q(x) = \sum_{i>0} (i-1)! \frac{x^i}{i!} = \ln\frac{1}{1-x}
Q ( x ) = i > 0 ∑ ( i − 1 ) ! i ! x i = ln 1 − x 1
这里会出现一个有意思的事情,如果你求出了普通排列数的 EGF,就会发现普通排列的 EGF 为 P ( x ) = 1 1 − x = exp Q P(x) = \frac{1}{1-x} = \exp Q P ( x ) = 1 − x 1 = exp Q 。不妨证明一下:
考虑构造长度为 n n n 的排列相当于把 n n n 拆成很多置换环,每个置换环组合的方案数,也就是先将 1 , 2 , ⋯ , n 1,2,\cdots,n 1 , 2 , ⋯ , n 划分为若干集合,每个集合形成一个置换环的方案。而一个集合的数形成置换环的方案数就是这个集合大小的圆排列数,因此长度为 n n n 的排列的方案数为把 1 ∼ n 1\sim n 1 ∼ n 划分为若干集合,每个集合圆排列方案数的积。这是多项式 exp 的一种理解。
因此还能得出:
记 n n n 个有标号点的无向连通图数量的 EGF 为 F F F ,则 n n n 个有标号点的无向图的数量的 EGF 为 exp F \exp F exp F 。
注意它也刻画出“树”和“森林” EGF 的关系,这比无向图的关系更容易考到。
从置换环的角度做这个题就简单多了,因为“错排”在置换环上的表现就是不存在自环 。不存在大小为 1 1 1 的置换环对应的生成函数为:
G ( x ) = ∑ i > 1 ( i − 1 ) ! x i i ! G(x) = \sum_{i>1} (i-1)!\frac{x^i}{i!}
G ( x ) = i > 1 ∑ ( i − 1 ) ! i ! x i
注意这里是 i > 1 i>1 i > 1 ,所以:
G ( x ) = − x + ln 1 1 − x G(x) = -x + \ln\frac{1}{1-x}
G ( x ) = − x + ln 1 − x 1
所以错排数的指数生成函数为:
F ( x ) = exp G = exp ( − x + ln 1 1 − x ) F(x) = \exp G = \exp(-x+\ln\frac{1}{1-x})
F ( x ) = exp G = exp ( − x + ln 1 − x 1 )
例题
你要带 n n n 个物品(n ≤ 1 0 500 n\leq 10^{500} n ≤ 1 0 5 0 0 ),物品有八种,每种无限个,但是有携带限制:
必须选偶数个。
最多选 1 1 1 个。
最多选 2 2 2 个。
必须选奇数个。
必须选 4 4 4 的倍数个。
最多选 3 3 3 个。
最多选 1 1 1 个。
必须选 3 3 3 的倍数个。
求携带方案数。对 10007 10007 1 0 0 0 7 取模。
题解
对于每个种类,写出 OGF 的封闭形式:
1 1 − x 2 \frac{1}{1-x^2} 1 − x 2 1 。1 + x 1+x 1 + x 。1 + x + x 2 1+x+x^2 1 + x + x 2 。x 1 − x 2 \frac{x}{1-x^2} 1 − x 2 x 。1 1 − x 4 \frac{1}{1-x^4} 1 − x 4 1 。1 + x + x 2 + x 3 1+x+x^2+x^3 1 + x + x 2 + x 3 。1 + x 1+x 1 + x 。1 1 − x 3 \frac{1}{1-x^3} 1 − x 3 1 。单独每一个函数,[ x n ] F ( x ) [x^n]F(x) [ x n ] F ( x ) 表示这种食物选 n n n 个的方案数,而两种食物一共 n n n 个的方案数,就是这两个函数的卷积的第 n n n 项系数。因此全部乘起来,化简得到:
F ( x ) = x ( 1 − x ) 4 F(x) =\frac{x}{(1-x)^4} F ( x ) = ( 1 − x ) 4 x
二项式定理:
F ( x ) = ∑ i = 0 ( i + 3 i ) x i + 1 F(x) = \sum_{i=0}\binom{i+3}{i} x^{i+1} F ( x ) = i = 0 ∑ ( i i + 3 ) x i + 1
因此第 n n n 项系数为 ( n + 2 n ) \binom{n+2}{n} ( n n + 2 ) 。
对于一个随机生成的 n n n 个点的二叉树,求叶子数的期望。
n ≤ 1 0 9 n\leq 10^9 n ≤ 1 0 9 ,误差不超过 1 0 − 9 10^{-9} 1 0 − 9 。
题解
先 DP 设 f i f_i f i 表示有 i i i 和点的二叉树个数,g i g_i g i 表示有 i i i 个点的所有二叉树的叶子数的和。考虑 f , g f,g f , g 的关系:
对于 n n n 个点的二叉树,设有 k k k 个叶子,任意删除一个都会得到 n − 1 n-1 n − 1 个点的二叉树。且删去两个不同的叶子,得到的二叉树不同构。 对于 n − 1 n-1 n − 1 个点的二叉树,恰好有 n n n 个位置可以添加一个新的叶子。因此每个 n − 1 n-1 n − 1 个点的二叉树都有 n n n 种方法得到一个 n n n 个点的二叉树,添加位置不同时,树不同构。 因此有 g n = n f n − 1 g_n = nf_{n-1} g n = n f n − 1 。f f f 的递推式则考虑枚举左子树叶子节点数得到:
f n = ∑ i = 1 n − 1 f i f n − i − 1 f_n = \sum_{i=1}^{n-1} f_i f_{n-i-1} f n = i = 1 ∑ n − 1 f i f n − i − 1
这是一个卷积的形式,令 F F F 为 f f f 的生成函数,用和卡特兰数一样的方法得到 F ( x ) = ∑ i ≥ 0 ( 2 i i ) 1 i + 1 x i F(x) = \sum_{i\geq 0} \binom{2i}{i}\frac{1}{i+1}x^i F ( x ) = ∑ i ≥ 0 ( i 2 i ) i + 1 1 x i 。
因此 f n = ( 2 n n ) n + 1 f_n = \frac{\binom{2n}{n}}{n+1} f n = n + 1 ( n 2 n ) ,则答案为:
g n f n = n ( n + 1 ) 2 ( 2 n − 1 ) \frac{g_n}{f_n} = \frac{n(n+1)}{2(2n-1)} f n g n = 2 ( 2 n − 1 ) n ( n + 1 )
求 n n n 个简单有标号无向连通图的数量。
n ≤ 1.3 × 1 0 5 n\leq 1.3\times 10^5 n ≤ 1 . 3 × 1 0 5 ,答案对 479 + 2 31 + 1 479+2^{31}+1 4 7 9 + 2 3 1 + 1 取模(原根为 3 3 3 )。
题解
首先这个模数不影响我们 NTT。
下面考虑求出有标号无向图的数量的 EGF F F F ,就可以得到答案生成函数 G = ln F G = \ln F G = ln F 。
相当于一个完全图,每个边可以选或者不选,因此 [ x n n ! ] F ( x ) = 2 n ( n − 1 ) 2 [\frac{x^n}{n!}] F(x) = 2^{\frac{n(n-1)}{2}} [ n ! x n ] F ( x ) = 2 2 n ( n − 1 ) 。
套上一个多项式 ln \ln ln 即可。
你要按顺序 拿走 n n n 个物品(n < 2 63 n<2^{63} n < 2 6 3 ),物品有十二种,每种无限个,有拿取限制:
1 , 2 , 3 , 4 1,2,3,4 1 , 2 , 3 , 4 这四种可以任意拿。
5 , 6 , 7 , 8 5,6,7,8 5 , 6 , 7 , 8 这四种必须分别拿奇数个。
9 , 10 , 11 , 12 9,10,11,12 9 , 1 0 , 1 1 , 1 2 这四种必须分别拿偶数个。
答案对 1 0 9 10^9 1 0 9 取模。
题解
十二种物品可以归为三类。因为选取有顺序,所以用 EGF。这三个的 EGF 分别为:
F ( x ) = ∑ i ≥ 0 x i i ! = e x F(x) = \sum_{i\geq 0} \frac{x_i}{i!} = e^x F ( x ) = i ≥ 0 ∑ i ! x i = e x
G ( x ) = ∑ i ≥ 0 x 2 i + 1 ( 2 i + 1 ) ! = e x − e − x 2 G(x) = \sum_{i\geq 0} \frac{x^{2i+1}}{(2i+1)!} = \frac{e^x-e^{-x}}{2} G ( x ) = i ≥ 0 ∑ ( 2 i + 1 ) ! x 2 i + 1 = 2 e x − e − x
H ( x ) = ∑ i ≥ 0 x 2 i ( 2 i ) ! = e x + e − x 2 H(x) = \sum_{i\geq 0} \frac{x^{2i}}{(2i)!} = \frac{e^x + e^{-x}}{2} H ( x ) = i ≥ 0 ∑ ( 2 i ) ! x 2 i = 2 e x + e − x
和前面一样,全部乘起来,注意这三类的每一类都还分了 4 4 4 种,因此有:
P ( x ) = ( F ( x ) G ( x ) H ( x ) ) 4 = ( e 3 x − e − x 4 ) 4 = e 12 x − 4 e 8 x + 6 e 4 x + e − 4 x − 4 256 \begin{aligned}P(x) &= (F(x)G(x)H(x))^4 \\&= (\frac{e^{3x}-e^{-x}}{4})^4 \\&= \frac{e^{12x}-4e^{8x}+6e^{4x}+e^{-4x}-4}{256}\end{aligned} P ( x ) = ( F ( x ) G ( x ) H ( x ) ) 4 = ( 4 e 3 x − e − x ) 4 = 2 5 6 e 1 2 x − 4 e 8 x + 6 e 4 x + e − 4 x − 4
256 256 2 5 6 在模 1 0 9 10^9 1 0 9 意义下没有逆元。在 n n n 比较小的时候特判答案,n n n 较大时:
a n s = n ! [ x n ] P ( x ) ans = n![x^n] P(x) a n s = n ! [ x n ] P ( x )
代入有:
81 × 1 2 n − 4 − 8 n − 2 + 6 × 4 n − 4 + ( − 4 ) n − 4 81\times 12^{n-4} - 8^{n-2} + 6\times 4^{n-4} + (-4)^{n-4} 8 1 × 1 2 n − 4 − 8 n − 2 + 6 × 4 n − 4 + ( − 4 ) n − 4
快速幂即可。