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 国王奇遇记——推式子

bzoj35163516: 国王奇遇记加强版(递推)

扰动法--*BZOJ3157: 国王奇遇记

[UOJ#223][BZOJ4654][Noi2016]国王饮水记

《邓哥奇遇记5》——同源策略