扰动三连:
等比数列求和:
Sn=∑i=1naqi−1
给他日上个n+1
Sn+aqn+1−1
=∑i=1n+1aqi−1
=a+∑i=1naqi
=a+qSn
可得
Sn=1−qa(1−qn)
自然数幂求和:
Snm=∑i=1nim
给他日上个n+1
Snm+(n+1)m
=∑i=1n+1im
=1+∑i=1n(i+1)m
=1+∑i=1n∑j=0mCmjij
=1+∑j=0mCmj∑i=1nij
=1+∑j=0m−1CmjSnj+Snm
自己把自己日掉了2333,不慌,发现m−1那一项没有被日掉,考虑把m换成m+1
Snm+1+(n+1)m+1
=...
=1+∑j=0m−1Cm+1jSnj+(m+1)Snm+Snm+1
可得
Snm=m+1(n+1)m+1−∑j=0m−1Cm+1jSnj−1
可以分治FFT一波做到mlog2m(这里打问号)
当然可以直接拉格朗日插值做到线性。
BZOJ3157国王奇遇记:
m>1
Snm=∑i=1nimmi
给他日上个n+1
Snm+(n+1)mmn+1
=∑i=1n+1immi
=m+∑i=1n(i+1)mmi+1
=m+m∑i=1n∑j=0mCmjijmi
=m+m∑j=0mCmj∑i=1nijmi
咦,形式好像不太一样,观察一下之后选择更改状态定义。
Snk=∑i=1nikmi
Snk+(n+1)kmn+1
=...
=m+m∑j=0kCkj∑i=1nijmi
=m+m∑j=0k−1CkjSnj+mSnk
可得
Snk=m−1(n+1)kmn+1−m−m∑j=0k−1CkjSnj
可以分治FFT一波做到mlog2m(这里打问号)
这题其实也可以拉格朗日插值做到线性,更神仙的推导见51nod1822,咕咕咕
我来补了。其实这个也没什么玄妙的。
有这么一个求和的式子:
i=0∑nf(i)qi
其中 f(i) 是一个 k 次多项式,那么我们可以做到 O(k) 计算。(多项式最好可以快速计算,比如单项式就可以快速计算)
主要的想法是观察发现这玩意长得很像等差乘等比的求和,只不过等差是 1 次多项式。那么我们再次尝试这个等差乘等比的做法。
设 Sn=∑i=0nf(i)qi
qSn=i=0∑nf(i)qi+1
(1−q)Sn=f(0)q+i=1∑n(f(i)−f(i−1))qi−f(n+1)qn
因为 f(i)−f(i−1) 是一个 k−1 次多项式,中间那个求和相当于一个子问题,只不过k--了。那么我们使用归纳法,可以假设那个求和是一个 g′(n)qn−g′(0),其中 g′(n) 是一个 k−1 次多项式。这样因为 f(n+1) 是一个 k 次多项式,其他的都是常数,所以可以得到 Sn=g(n)qn−g(0),其中 g(n) 是一个 k 次多项式。
这样我们得到这个和式的一个优美的式子,关键就是如何求这个多项式 g。
我们有 Sn−Sn−1=g(n)qn−g(n−1)qn−1=f(n)qn,于是 g(n)=qg(n−1)+f(n)
这样我们设 g(0)=x,那么由递推式可得其他的值都可以写成关于 x 的一次函数。那么只要求出 g(0),其他值也就得到了,就可以拉格朗日插值。
怎么求 g(0)?因为 k 次多项式的 k+1 阶差分为 0,所以可以列出方程
i=0∑k+1(−1)i(ik+1)g(k+1−i)=0
然后把 x 代入即可解出 x。