首先把给定的多项式转成牛顿级数,即转写成 F(x)=k−1∑i=0ai(xi)
然后套路的拆开项,考虑计算 ∑π(cycπk)
让我们考虑一个错排,显然它是由非自环的循环置换为基本单位构成的,即 e−x−ln(1−x)
然后考虑从中选 k 个。不难发现这只需要对一个循环置换附加一个因子 (1+y) 即可做到: e(1+y)(−x−ln(1−x))
首先求考虑求 [xn]ey(−x−ln(1−x)),然后使用二项式展开并卷积处理。
设 f22=−x−ln(1−x),显然其存在复合逆,设复合逆为 g。
则 [xn]eyf2/2=1n[xn−1]∂eyx2/2∂x(xg)n
我们知道 ∂eyx2/2∂x=xyeyx2/2=∑i≥0x2i+1yi+12ii!
因此 1n[xn−1yk]∂eyx2/2∂x(xg)n=1n2k−1(k−1)n
考虑求 g。我们知道 f22=−x−ln(1−x)
所以 x22=−g−ln(1−g)
不幸的是如果我们直接对这个式子牛顿迭代,会出现一些意料之外的问题。
所以不妨将其改写成 √−2g−2ln(1−g)−x=0
然后对其牛顿迭代。
时间复杂度 O(nlog2n)(视 n,k 同阶)。
代码:
1 |
|