标题很丑。。。
问题描述
(n) 个变量 (a_n),求所有的
[s_j=sum_{i=1}^{n}a_i^j, j in [0,m]
]
解决
(O(n*m)) 太暴力了
一个比较好的方法
设
[F(x)=Pi_{i=1}^{n}(a_ix+1)
]
则
[Ln(F(x))=sum_{i=1}^{n}Ln(a_ix + 1)
]
考虑这个 (Ln(a_ix+1)) 是个什么
[Ln'(a_ix+1)=frac{a_i}{a_ix+1}=sum_{j=0}(-1)^ja_i^{j+1}x^j
]
等比数列求和可证
那么就有两种方法
方法一
[Ln'(F(x))=sum_{i=1}^{n}Ln'(a_ix + 1)=sum_{i=1}^{n}sum_{j=0}(-1)^ja_i^{j+1}x^j
]
就是
[sum_{j=0}(-1)^j(sum_{i=1}^{n}a_i^{j+1})x_j
]
那么分治 (FFT) 然后求 (Ln) 再 求导即可
方法二
[Ln'(a_ix+1)=frac{a_i}{a_ix+1}=sum_{j=0}(-1)^ja_i^{j+1}x^j
]
把它积分一下
[Ln(a_ix+1)=sum_{j=1}frac{(-1)^{j-1}a_i^{j}}{j}x^{j}
]
那么
[Ln(F(x))=sum_{i=1}^{n}sum_{j=1}frac{(-1)^{j-1}a_i^{j}}{j}x^{j}
]
即
[Ln(F(x))=sum_{j=1}frac{(-1)^{j-1}}{j}(sum_{i=1}^{n}a_i^j)x^{j}
]
那么分治 (FFT) 然后求 (Ln) 即可
还有一只 (log) 的做法,见 (zzq)的博客