Processing math: 0%

[BZOJ 3328]PYXFIB

又学了个新套路呢qwq

题面要求的其实是:

\sum_{i = 0}^n [k|i]\binom{n}{i} F_i

不考虑那个[k|i],式子是非常像一个二项式展开的……

考虑构造矩阵的二项式展开,可以发现(其中A是斐波那契数列的二项式展开):

(I + A)^n = \sum_{i = 0}^n \binom{n}{i} A^i

然后k=1的情况我们就会做辣!接下来的问题是,如何取出一个生成函数中次数为k倍数的项求和?

然后我们发现单位根有个非常优良的性质:

\frac{1}{k} \sum_{i=1}^{k} \xi_k^{ni} = [k|n]

这里的n是一个常数,但是其实可以对应到原式里的某一项的次数。至于证明……满足k|n的情况左边显然是一堆1取平均值,其他情况可以通过等比数列求和证明左边为0。

于是可以构造多项式(I+xA)^n,把所有k次单位根做为x(求这个的话,可以利用原根)带入,对结果取平均值即可。

代码: