XXX.calc加强版
没错,这题还有个加强版,要从多项式角度考虑了。
首先,很容易就能想到,单个数\(a\)的生成函数即为\(1+ax\),而我们要求的就是\(\prod\limits_{i=1}^{m}(1+ix)\)这个多项式的前\(n\)项的系数。
我们在之前XV.付公主的背包中也碰见过类似的形式。于是我们可以直接套上一个\(\ln\)就能把它转成和的形式。
于是现在就有
考虑\(\ln(1+ix)\)的泰勒展开,会发现它就等于\(\sum\limits_{j=1}^{\infty}\dfrac{(-1)^{j+1}i^j}{j}x^j\)。
于是,\(\sum\limits_{i=1}^m\ln(1+ix)=\sum\limits_{i=1}^m\sum\limits_{j=1}^{\infty}\dfrac{(-1)^{j+1}i^j}{j}x^j=\sum\limits_{j=1}^{\infty}\dfrac{(-1)^{j+1}\sum\limits_{i=1}^mi^j}{j}x^j\)。
假如我们知道\(\sum\limits_{i=1}^mi^j\),就可以直接\(O(n)\)地计算上式了;于是现在关键就在于计算此式。
我们考虑上式的EGF:\(\sum\limits_{i=0}^{\infty}\dfrac{\Big(\sum\limits_{j=1}^mj^i\Big)x^i}{i!}\)
交换枚举顺序,得到
将它重新转回EGF形式,得到
然后套上等比数列求和公式,最终就得到
重新转回函数形式,得到
因为分子分母都没有常数项,故我们直接把常数项约掉,就得到
分母上多项式求逆一下,再和分子卷一起就得到了\(\sum\limits_{i=1}^mi^j\)的EGF;再乘上一个阶乘,最终就得到了原序列。
通过\(\sum\limits_{i=1}^mi^j\),我们就能求出\(\sum\limits_{i=1}^m\ln(1+ix)\),然后套上一个\(\exp\)就是原序列。
时间复杂度\(O(n\log n)\)。常数极大,卡了好久才卡过。