bzoj3157/3516/4126国王奇遇记
Posted 66t6
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj3157/3516/4126国王奇遇记相关的知识,希望对你有一定的参考价值。
求(displaystyle{sum_{i=1}^n m^ii^m}(xle 10^5,nle10^9))
首先转为有更一般的形式(displaystyle{sum_{i=1}^nm^if(i)})其中(f(i))是(x)次多项式
(displaystyle{sum m^xf(x)delta x=g(x)m^x(+C)})
可得(displaystyle{Delta g(x)m^x=f(x)m^x})
有(g(x+1)=frac{g(x)+f(x)}{m})
问题是我们不知道(g(0))
设(g(i)=A_ig(0)+B_i)
可得(A_{i+1}=frac{A_i}{m},B_{i+1}=frac{B_i+f(i)}{m})
但我们不知道(g(0))
用到一个套路:利用高阶差分构建等量关系
即[Delta^{m+1}g(0)=sum_{i=0}^{m+1}inom{m+1}{i}(-1)^{m+1-i}g(i)=0]
一一代入(g(i))后变成一元一次方程可以解出(g(0))
后面插值即可
答案式子(displaystyle{sum_1^{n+1} m^xf(x)delta x=g(n+1)m^{n+1}-g(0)})
int main(void){
re int i,up=0,down=0,Inv;scanf("%d%d",&n,&m);
if(m==1)return printf("%d
",(int)(1ll*n*(n+1)/2%mod)),0;
Sieve();
Inv=qpow(m,mod-2);a[0]=1;b[0]=0;
for(i=1;i<=m+1;++i)a[i]=1ll*a[i-1]*Inv%mod,b[i]=1ll*(b[i-1]+pw[i-1])*Inv%mod;
for(i=0;i<=m+1;++i){
up=(up+((m+1-i)&1?-1ll:1ll)*C(m+1,i)*b[i])%mod,down=(down+((m+1-i)&1?-1ll:1ll)*C(m+1,i)*a[i])%mod;
}
g[0]=-1ll*up*qpow(down,mod-2)%mod;
for(i=1;i<=m+1;++i)g[i]=(1ll*a[i]*g[0]+b[i])%mod;
printf("%d
",(int)(((1ll*lagrange(g,n+1)*qpow(m,n+1)-g[0])%mod+mod)%mod));
return 0;
}
以上是关于bzoj3157/3516/4126国王奇遇记的主要内容,如果未能解决你的问题,请参考以下文章
bzoj 3157 & bzoj 3516 国王奇遇记 —— 推式子
bzoj 3157 && bzoj 3516 国王奇遇记——推式子