首页 > 其他分享 >浅谈反演

浅谈反演

时间:2023-05-15 16:02:41浏览次数:32  
标签:浅谈 limits dfrac sum 反演 fab binom brace

浅谈反演

二项式反演

\(g_i=\sum\limits_{j=0}\binom{i}{j}f_j,f_i=\sum\limits_{j=0}(-1)^{i-j}\binom{i}{j}g_j\)

还有一个的形式\(g_i=\sum\limits_{j=i}\binom{j}{i}f_j,f_i=\sum\limits_{j=i}(-1)^{i-j}\binom{j}{i}g_j\)

这里只针对第一个形式,为了得到更普遍的反演,这里我们引入一个等式

\(\sum\limits_{k=j}^{i}(-1)^{k-j}\binom{i}{k}\binom{k}{j}=[i=j]\)

注意到\(\binom{i}{k}\binom{k}{j}=\binom{i}{j}\binom{i-j}{k-j}\)

即\(\sum\limits_{k=j}^{i}(-1)^{k-j}\binom{i}{k}\binom{k}{j}=\binom{i}{j}\sum\limits_{k=j}^{i}(-1)^{k-j}\binom{i-j}{k-j}=\binom{i}{j}\sum\limits_{k=0}^{i-j}(-1)^{k}\binom{i-j}{k}=\binom{i}{j}(1-1)^{i-j}\)

这里只有\(i=j\)时\(0^0=1\)

定义矩阵\(A,B\),\(a_{i,j}=\binom{i}{j},b_{i,j}=(-1)^{i-j}\binom{i}{j}\)

\(A\times B=C\),\(c_{i,j}=\sum\limits_{k=0}^na_{i,k}b_{k,j}=\sum\limits_{k=0}^n(-1)^{k-j}\binom{i}{k}\binom{k}{j}=[i=j]\),则\(C=I\)

这里我们再记\(F\)为一维行向量,\(G\)同理

\(F\times A=G\),则\(F\times A\times B=G\times B=F\)

斯特林反演

斯特林数

先是第二类

\(n\brace m\),表示\(n\)个不同元素分到\(m\)个有序集合的方案数

不难得到一个递推式

\(n\brace m\) \(=\) \(n-1\brace m\) \(\times m\) \(+\) \(n-1\brace m-1\)

也就是新开一个集合或者在现有的集合里放一个

\(Bell\)数\(B_n=\sum\limits_{m=0}^n\)\(n\brace m\)

考虑一个集合任意大小\(A\)的标号方案为\(|A|\)

则其\(EGF\)为\(A(x)=\dfrac{x}{1!}+\dfrac{x^2}{2!}...=e^x-1\)

则\(Bell\)数即为多个\(A\)的标号合并,即为\(SET_A=e^{e^x-1}\)

设\(f_m\)为固定\(m\)后\(n\brace m\)的\(EGF\)

则\(f_m=\dfrac{(e^x-1)^m}{m!}\)

第一类

\(n\brack m\),表示\(n\)个不同元素分成\(m\)个轮换的方案数

直观看就是集合内部同样有顺序

同样不难得出递推式

\(n\brack m\) \(=\) \(n-1\brack m\) \(\times (n-1)\) \(+\) \(n-1\brack m-1\)

这里我们也不难得出生成函数

考虑固定\(n\),记为\(f_n(x)\)
则\(f_n(x)=f_{n-1}(x)*(n-1)+f_{n-1}(x)*x=f_{n-1}(x)\times(x+n-1)\)

\(f_0(x)=1\)

既得\(f_n(x)=\prod\limits_{i=0}^{n-1}(x+i)\),这就是\(x\)的\(n\)次上升幂,记为\(x^{\overline{n}}\)

下降幂同理为\(x^{\underline{n}}=\prod\limits_{i=0}^{n-1}(x-i)\)

考虑\((-x)^{\overline{n}}=\prod\limits_{i=0}^{n-1}(-x+i)=(-1)^n\prod\limits_{i=0}^{n-1}(x-i)=(-1)^nx^{\underline{n}}\)即为上升幂和下降幂的转化

这里我们先只探讨单个\(x^{\overline{n}}\)的求法

考虑倍增\(x^{\overline{2n}}=x^{\overline{n}}(x+n)^{\overline{n}}\)

\(x^{\overline{n+m}}=x^{\overline{n}}(x+n)^{\overline{m}}\)

若已知\(f(x)\),对于\(f(x+n)\)

\(f(x+n)=\sum\limits_if_i(x+n)^i=\sum\limits_{i}f_i\sum\limits_{j=0}^ix^jn^{i-j}\binom{i}{j}\)

\(=\sum\limits_jx^j\sum\limits_{i=j}n^{i-j}\binom{i}{j}f_i=\sum\limits_j\dfrac{x^j}{j!}\sum\limits_{i=j}\dfrac{n^{i-j}}{(i-j)!}i!f_i\)

注意到这是个卷积的形式

考虑如果固定\(m\)的话,这里我们可以采用类似\(n\brace m\)的方式

对于一个轮换,其\(EGF\)\(A(x)=\sum\limits\dfrac{(i-1)!}{i!}x^i=\sum\limits\dfrac{x^i}{i}\)

同样\(n\brack m\)为\(SET_A=A^m(x)\)

斯特林反演

首先有个式子

\(m^n=\sum\limits_{k=0}^{m}\)\(n\brace k\)\(\binom{m}{k}k!\)

也就是在\(n\)个不同的小球放到\(m\)个不同的小盒中,可为空,同时我们可以枚举用了多少小盒

考虑\(x^{\underline{n}}=(-x)^{\overline{n}}(-1)^n=\sum\limits_{i=0}^n\)\(n\brack i\)\((-1)^{n-i}x^i\)

\(=\) \(\sum\limits_{i=0}^n\)\(n\brack i\)\((-1)^{n-i}\) \(\sum\limits_{k=0}^{i}\)\(i\brace k\)\(\binom{x}{k}k!\)和

\(=\) \(\sum\limits_{i=0}^n\)\(n\brack i\)\((-1)^{n-i}\) \(\sum\limits_{k=0}^i\)\(i\brace k\)\(x^{\underline{k}}\)

\(=\)\(\sum\limits_{k=0}^n\)\(x^{\underline{k}}\)\(\sum\limits_{i=k}^n\)\(n\brack i\)\((-1)^{n-i}\)\(i\brace k\)

注意到当\(k=n\)时,\(\sum\limits_{i=k}^n\)\(n\brack i\)\((-1)^{n-i}\)\(i\brace k\) =1,因此其他时候皆为\(0\)

即\(\sum\limits_{i=k}^n\)\(n\brack i\)\((-1)^{n-i}\)\(i\brace k\) \(=[k=n]\)

这同样可以用二项式反演里的方法定义矩阵,最后得

\(g_i=\sum\limits_{j=0}\)\(i\brace j\) \(f_j,f_i=\sum\limits_{j=0}(-1)^{i-j}\)\(i\brack k\)\(g_j\)

\(g_i=\sum\limits_{j=0}\)\(i\brack j\) \(f_j,f_i=\sum\limits_{j=0}(-1)^{i-j}\)\(i\brace k\)\(g_j\)

生成函数的一些推论

幂和

首先我们知道\(\sum\limits_{i=0}^ni^k\)是个\(k+1\)次多项式

\(\sum\limits_{i=0}^ni^k\)=\(\sum\limits_{i=0}^n\)\(\sum\limits_{j=0}^{i}\)\(k\brace j\)\(\binom{i}{j}j!\)

注意\(k\brace j\)的\(EGF\)为\(\dfrac{(e^x-1)^j}{j!}\)

\(\sum\limits_{i=0}^n\sum\limits_{j=0}^{i}\binom{i}{j}[x^k]k!(e^x-1)^j=[x^k]k!\sum\limits_{i=0}^n\sum\limits_{j=0}^{i}\binom{i}{j}(e^x-1)^j\)

注意到\(\sum\limits_{j=0}^{i}\binom{i}{j}(e^x-1)^j\)是一个二项式展开的形式

则其可化为\([x^k]k!\sum\limits_{i=0}^n(e^{xi})=[x^k]k!\dfrac{e^{x(n+1)}-1}{e^x-1}\)

回到\(\sum\limits_{i=0}^n\)\(\sum\limits_{j=0}^{i}\)\(k\brace j\)\(\binom{i}{j}j!\)=\(\sum\limits_{j=0}^{n}\)\(k\brace j\)\(\sum\limits_{i=j}^{n}\binom{i}{j}j!\)

注意到\(\sum\limits_{i=j}^{n}\binom{i}{j}=\binom{n+1}{j+1}\)

其可化为\(\sum\limits_{j=0}^{n}\)\(k\brace j\)\(j!\binom{n+1}{j+1}\)

幂和变形

如果这里求的是\(\sum\limits_{i=0}^ni^k\binom{n}{i}\)

即可化为\(\sum\limits_{i=0}^n\)\(\sum\limits_{j=0}^{i}\)\(k\brace j\)\(\binom{i}{j}j!\binom{n}{i}\)=\(\sum\limits_{j=0}^{n}\)\(k\brace j\)\(\sum\limits_{i=j}^{n}\binom{i}{j}j!\binom{n}{i}\)=\(\sum\limits_{j=0}^{n}\)\(k\brace j\)\(j!\binom{n}{j}\)\(\sum\limits_{i=j}^{n}\binom{n-j}{i-j}\)

注意到\(\sum\limits_{i=j}^{n}\binom{n-j}{i-j}=\sum\limits_{i=0}^{n-j}\binom{n-j}{i}=2^{n-j}\)

则原式可化为\(\sum\limits_{j=0}^{n}\)\(k\brace j\)\(j!\binom{n}{j}\)\(2^{n-j}\),时间复杂度为\(\Theta(n\log_2n)\)

不过这里有线性做法

首先有复合函数\([x^k]F(G(x))\)

我们知道\(F(G(x))=\sum\limits_{i=0}[x^i]F(x)G^i(x)\),所以\([x^k]F(G(x))=[x^k]\sum\limits_{i=0}[x^i]F(x)G^i(x)\)

注意到如果\(G(x)\)的常数项为\(0\),\(i>k\)时对答案没贡献,因此我们的求和上限为\(k\)

回到本题,我们已经求的\(\sum\limits_{i=0}^ni^k=[x^k]k!\sum\limits_{i=0}^n(e^{xi})\)

注意到\(\binom{n}{i}\)的生成函数为\((1+x)^n\)

不难得出原式为\(\sum\limits_{i=0}^ni^k\binom{n}{i}=[x^k]k!\sum\limits_{i=0}^n[x^i](1+x)^n(e^{xi})\)

这个长得很像复合函数的展开,我们不难得出其为\([x^k]k!(1+e^x)^n\),这里有点不对,因为它的求和上限为\(+\infin\),但因为\(i>n\),\((1+x)^n\)的没有\(>n\)的项,所以求和上限可以改为\(n\)这里不难看出实际上是一个二项式展开

可上限为\(n\)依旧不行,因此我们想对\(G(x)=e^x\)去除常数项,也就是\(G(x)-1=e^x-1\)

原式即可化为\([x^k]k!\sum\limits_{i=0}^k[x^i](2+x)^n(e^x-1)^i\)

注意到我们这里并不处理\((e^x-1)^i\)

假设现在我们有一个函数\(F(x)\),我们考虑在\(x^k\)的地方截断,即\(f(x)=(F(x))\bmod(x^{k+1})\)

考虑\(F(x)\)向右平移\(c\)个单位,记为\(G(x)=F(x-c)\)

同样\(g(x)=f(x-c)\)

不难发现\([x^k]G(e^x)=[x^k]F(e^x-1)=[x^k]f(e^x-1)=[x^k]g(e^x)\)

其实这个好像不呢么显然

首先明确\(G(x)\not=g(x)\bmod x^{k+1}\)

举个例子

这里我们令\(c=1,G(x)=(x+1)^n\)

我们这里先回顾一下\(F(x)=(x+2)^n\)

\(f(x)=(x+2)^n \bmod x^{k+1}=\sum\limits_{i=0}^k\binom{n}{i}x^i2^{n-i}\)

\(g(x)=f(x-1)=\sum\limits_{i=0}^k\binom{n}{i}(x-1)^i2^{n-i}=\sum\limits_{i=0}^k\binom{n}{i}2^{n-i}\sum\limits_{j=0}^ix^j\binom{i}{j}(-1)^{i-j}=\sum\limits_{j=0}^kx^j\sum\limits_{i=j}^k\binom{n}{i}2^{n-i}\binom{i}{j}(-1)^{i-j}\)

\(G(x)=F(x-1)=\sum\limits_{i=0}^n\binom{n}{i}(x-1)^i2^{n-i}=\sum\limits_{j=0}^kx^j\sum\limits_{i=j}\binom{n}{i}2^{n-i}\binom{i}{j}(-1)^{i-j}\bmod x^{k+1}\)

明显\(g(x)\not=G(x)\bmod x^{k+1}\),但当\(j=k\)时,两者相等??注意这里\(x\)是不满足的

我们可以发现问题在于\(F(x-1)\)依旧有常数项,所以在截断和平移时会产生问题即\(f(x)\not =g(x+1)\bmod x^{k+1}\)

对于\(H(P(x))=[x^k]\sum\limits_{i=0}x^iH(x)P^i(x)\)

如果\(P(x)\)无常数项,则求和上限为\(k\)

因此我们可以直接截断,这里\(G(e^x)\bmod x^{k+1}=g(e^x)\),原因就在这

原式\(=\)\([x^k]k!G(e^x)=[x^k]k!F(e^x-1)=[x^k]k!f(e^x-1)=[x^k]k!g(e^x)\)

因此这里我们直接展开得到\([x^k]k!\sum\limits_{i=0}^k[x^i]g(x)e^{xi}\)

这里我们不妨把\([x^k]k!\sum\limits_{i=0}^ke^{xi}\)重新代为\(\sum\limits_{i=0}^ni^k\)

则原式可直接化为\(\sum\limits_{i=0}^k[x^i]g(x)i^k\)

注意到我们这里求和上限为\(k\),瓶颈在于\([x^i]g(x)\)

因此没有一个可以简单求得\(g(x)\)的方法

我们这里先明确\(G(x+1)=g(x+1)\bmod x^{k+1}\),不过这里在推的时候还得借用\(f,F\)

首先对\(F\)求导,\(nF(x)=(x+2)F'(x)\)

这里我们可以直接将其替换\(f\),但要注意\(f'(x)\)的第\(k\)项缺失

即\(nf(x)=(x+2)f'(x)+2[x^k]F'(x)x^k\)

\(nf(x)-(x+2)f'(x)=2[x^k]F'(x)x^k\)

这里我们再平移一位

即\(ng(x)-(x+1)g'(x)=2[x^k]F'(x)(x-1)^k=n2^{n-k}\binom{n-1}{k}(x-1)^k\)

注意到\((x-1)^k\)可以展开

即\(ng(x)-(x+1)g'(x)=\sum\limits_{i=0}^kx^i\binom{k}{i}(-1)^{k-i}n2^{n-k}\binom{n-1}{k}\)

这里我们提取\(x^i\)的系数

则\(n[x^i]g(x)-[x^i](x+1)g'(x)=\binom{k}{i}(-1)^{k-i}n2^{n-k}\binom{n-1}{k}\)

\(n[x^i]g(x)-[x^i]g'(x)-[x^{i-1}]g'(x)=\binom{k}{i}(-1)^{k-i}n2^{n-k}\binom{n-1}{k}\)

还原\(g'(x)\),这里只需还原\(x^i,x^{i-1}\)即可

\(n[x^i]g(x)-(i+1)[x^{i+1}]g(x)-(i)[x^{i}]g(x)=\binom{k}{i}(-1)^{k-i}n2^{n-k}\binom{n-1}{k}\)

则\([x^{i+1}]g(x)=\dfrac{\binom{k}{i}(-1)^{k-i+1}n2^{n-k}\binom{n-1}{k}+(n-i)[x^i]g(x)}{i+1}\)

现在我们只需要求得\([x^0]g(x)\)即可

不难发现\([x^0]g(x)=\sum\limits_{i=0}^k\binom{n}{i}2^{n-i}(-1)^{i}\)

#include<bits/stdc++.h>
using namespace std;
const int MAXN=5005;
const int MOD=1e9+7;
int n,k;
int cnt_prime;
int Pow(int a,int b,int p)
{
    int base=a;
    int res=1;
    while(b)
    {
        if(b&1)
        {
            res=((long long)res*base)%p;
        }
        base=((long long)base*base)%p;
        b>>=1;
    }
    return res;
}
int inv(int a,int p)
{
    return Pow(a,p-2,p);
}
int inv_fac[MAXN];
int fac[MAXN];
int C(int n,int m)
{
    if(n<m||m<0)
    {
        return 0;
    }
    if(n==m||m==0)
    {
        return 1;
    }
    return ((((long long)fac[n]*inv_fac[m])%MOD)*inv_fac[n-m])%MOD;
}
int g[MAXN];
int main()
{
    int inv2=MOD-MOD/2;
    fac[0]=1;
    for(int i=1;i<=MAXN-5;i++)
    {
        fac[i]=((long long)fac[i-1]*i)%MOD;
    }
    inv_fac[MAXN-5]=inv(fac[MAXN-5],MOD);
    for(int i=MAXN-5-1;i>=1;i--)
    {
        inv_fac[i]=((long long)inv_fac[i+1]*(i+1))%MOD;
    }
    scanf("%d %d",&n,&k);
    if(n<=k)
    {
        int Res=0;
        for(int i=1;i<=n;i++)
        {
            int Ne=((long long)C(n,i)*Pow(i,k,MOD))%MOD;
            Res=((long long)Res+Ne)%MOD;
        }
        printf("%d\n",Res);
        return 0;
    }
    g[0]=0;
    int Mu2=Pow(2,n,MOD);
    int Bin=1;
    for(int i=0;i<=k;i++)
    {  
        int K=((long long)Mu2*Bin)%MOD;
        //printf("%d %d %d??\n",i,Mu2,Bin);
        if(i&1)
        {
            g[0]=((long long)g[0]-K+MOD)%MOD;
        }
        else
        {
            g[0]=((long long)g[0]+K)%MOD;
        }
        Mu2=((long long)Mu2*inv2)%MOD;
        Bin=((long long)Bin*(n-i))%MOD;
        Bin=((long long)Bin*inv(i+1,MOD))%MOD;
    }
    //printf("%d??\n",g[0]);
    int Ml=Pow(2,n-k,MOD);
    Ml=((long long)Ml*n)%MOD;
    int Kp=1;
    for(int i=0;i<k;i++)
    {
        Kp=((long long)Kp*(n-1-i))%MOD;
        Kp=((long long)Kp*inv(i+1,MOD))%MOD;
    }
    Ml=((long long)Ml*Kp)%MOD;
    for(int i=1;i<=k;i++)
    {
        int Kp=((long long)Ml*C(k,i-1))%MOD;
        if((k-(i-1)+1)&1)
        {
            Kp=MOD-Kp;
        }
        int Pp=(n-(i-1));
        Pp=((long long)Pp*g[i-1])%MOD;
        Kp=((long long)Kp+Pp)%MOD;
        Kp=((long long)Kp*inv(i,MOD))%MOD;
        g[i]=Kp;
    }
    int Res=0;
    for(int i=0;i<=k;i++)
    {
        int Ne=((long long)g[i]*Pow(i,k,MOD))%MOD;
        Res=((long long)Res+Ne)%MOD;
    }
    printf("%d\n",Res);
}

还有一个\(\sum\limits_{i=1}^nfab_i\times i^k\)

首先\(fab_i=fab_{i-1}+fab_{i-2}\)

不难得出\(fab\)的\(OGF\),\(f(x)=xf(x)+x^2f(x)+[x^0]f(x)\)

的解出\(f(x)=\dfrac{1}{1-x-x^2}\)

返回原式\([x^k]k!\sum\limits_{i=1}^n[x^i]\dfrac{1}{1-x-x^2} (e^{xi})\)

同样的套路令\(F(x)=\dfrac{1}{1-x-x^2}\),\(G(x)=e^x\)

则原式可化为\([x^k]k!\dfrac{1}{1-e^x-e^{2x}}\)(??),这里的求和上限为\(+\infin\),\(>n\)的项是会统计的

重新定义\(F,G\)

这里我们可以对\(G(x)\)截断,即\(G(x)=\dfrac{1}{1-x-x^2}\bmod x^{n+1}\)

原式即可化为\([x^k]k!\sum\limits_{i=1}^n[x^i]G(x) (e^{xi})=[x^k]k!G(e^x)\)

为了消除常数项,设\(G(x)=F(x-1)\),则其可化为\([x^k]k!F(e^x-1)\)

展开\([x^k]k!\sum\limits_{i=1}^n[x^i]F(x)(e^x-1)^i\),这里没有常数项,即\([x^k]k!\sum\limits_{i=1}^k[x^i]F(x)(e^x-1)^i\)

考虑对\(F(x)\)截断为\(f(x)=F(x)\bmod x^{k+1}\),原式可化为\([x^k]k!\sum\limits_{i=1}^k[x^i]f(x)(e^x-1)^i\)

我们在记\(g(x)=f(x-1)\),和上题一样,\(G(e^x)=g(e^x)\bmod x^{k+1}\)则原式可直接化为\(\sum\limits_{i=0}^k[x^i]g(x)i^k\)

这里\(F(x)=G(x+1)=\dfrac{1}{1-(x+1)-(x+1)^2}\bmod x^{n+1}=\dfrac{-1}{x^2+3x+1}\bmod x^{n+1}\)

注意这样是不对的,\(x^2+3x+1\)可能会往后贡献

我们先考虑\(G(x)=\dfrac{1}{1-x-x^2}\bmod x^{n+1}\)是什么

如果没有截断,\(G(x)=xG(x)+x^2G(x)+1\),不难发现,这里多算了\(fab_{n}x^{n+1}\),\(fab_{n}x^{n+2},fab_{n-1}x^{n+1}\)

即\(G(x)=xG(x)+x^2G(x)+1-fab_{n}x^{n+1}-fab_{n}x^{n+2}-fab_{n-1}x^{n+1}\)

则\(G(x)=\dfrac{1-fab_{n}x^{n+1}-fab_{n}x^{n+2}-fab_{n-1}x^{n+1}}{1-x-x^2}\)

则\(F(x)=\dfrac{fab_{n}(x+1)^{n+1}+fab_{n}(x+1)^{n+2}+fab_{n-1}(x+1)^{n+1}-1}{x^2+3x+1}\)

我们先明确,要递推求\(g\)

其中\(G(x+1)=g(x+1)\bmod x^{k+1}\)

我们知道\(G(x)\not =F(x-1)\bmod x^{k+1}\),但\(g(x)=f(x-1)\bmod x^{k+1}\)

因此我们可以先求得\(G(x+1)\bmod x^{k+1}\)

\(G(x+1)=F(x)=F(x)=\dfrac{fab_{n}(x+1)^{n+1}+fab_{n}(x+1)^{n+2}+fab_{n-1}(x+1)^{n+1}-1}{x^2+3x+1}\)

不妨令\(P(x+1)=fab_{n}(x+1)^{n+1}+fab_{n}(x+1)^{n+2}+fab_{n-1}(x+1)^{n+1}-1\)

则\(G(x+1)=\dfrac{P(x+1)}{x^2+3x+1}\)

则\(G(x+1)x^2+3xG(x+1)+G(x+1)=P(x+1)\)

这里我们求\(P(x+1)\)在\(x^{k+1}\)处截断的结果,令其为\(p(x+1)\)

我们再令\(h_n(x+1)=(x+1)^n\bmod x^{k+1}\)

\(P(x+1)=fab_{n}(x+1)^{n+1}+fab_{n}(x+1)^{n+2}+fab_{n-1}(x+1)^{n+1}-1\)

可以发现这里我们直接替换即可

即\(p(x+1)=(fab_n+fab_{n-1})h_{n+1}(x+1)+fab_nh_{n+2}(x+1)-1\)

对于\(h_n(x+1)\),求个导

\(h_n'(x+1)\times (x+1)+([x^k]h_n(x+1)-[x^{k-1}](h'_n(x+1)))x^k=nh_n(x+1)\)

即\(h'(x+1)\times(x+1)+(n\binom{n}{k}-n\binom{n-1}{k-1})x^k=nh_n(x+1)\)

即\(h'(x+1)\times(x+1)+(n\binom{n}{k}-n\binom{n-1}{k-1})x^k=nh_n(x+1)\)

则\(h'(x+1)\times(x+1)=nh_n(x+1)+(n-k)\binom{n}{k}x^k\)

提取\([x^i]\)的系数

\([x^i]h'(x+1)(x+1)=[x^i]nh_n(x+1)+[k=i](n-k)\binom{n}{k}\)

即\([x^{i-1}]h_n'(x+1)+[x^i]h_n'(x+1)=[x^i]nh_n(x+1)+[k=i](n-k)\binom{n}{k}\)

即\([x^{i}](i)h_n(x+1)+[x^{i+1}](i+1)h_n(x+1)=[x^i]nh_n(x+1)+[k=i](n-k)\binom{n}{k}\)

则\([x^i]h_n(x+1)=\dfrac{(n-i)[x^i]h_n(x+1)+[k=i](n-k)\binom{n}{k}}{i+1}\)

等等,\((x+1)^n\bmod x^{k+1}\)不是可以直接算吗???

设不取模的为\(H_n(x)\)

\(H_n(x)=x^n,H_n(x+1)=(x+1)^n,h_n(x+1)=\sum\limits_{i=0}^k\binom{n}{i}x^k,h_n(x)=\sum\limits_{i=0}^k\binom{n}{i}(x-1)^k\)

感觉推\(x+1\)没用吧,可能是我没理解

对不起,好像有用

直接沿用上一题的思路

\(G(x+1)x^2+3xG(x+1)+G(x+1)=P(x+1)\)

我们考虑截断\(x^{k+1}\)

\(g(x+1)x^2+3xg(x+1)+g(x+1)=p(x+1)+[x^{k}]g(x+1)(x)^{k+2}+[x^{k-1}]g(x+1)x^{k+1}+3[x^k]g(x+1)x^{k+1}\)

平移一下

\(g(x)(x-1)^2+3(x-1)g(x)+g(x)=p(x)+[x^{k}]g(x+1)(x-1)^{k+2}+[x^{k-1}]g(x+1)(x-1)^{k+1}+3[x^k]g(x+1)(x-1)^{k+1}\)

\(x^2g(x)+xg(x)-g(x)=p(x)+[x^{k}]g(x+1)(x-1)^{k+2}+[x^{k-1}]g(x+1)(x-1)^{k+1}+3[x^k]g(x+1)(x-1)^{k+1}\)

提取\([x^i]\)的系数

\([x^{i-2}]g(x)+[x^{i-1}]g(x)-[x^{i}]g(x)\)

\(=[x^i]p(x)+[x^k]g(x+1)(-1)^{k+2-i}\binom{k+2}{i}+[x^{k-1}]g(x+1)(-1)^{k+1-i}\binom{k+1}{i}+3[x^k]g(x+1)(-1)^{k+1-i}\binom{k+1}{i}\)

现在问题在于求\([x^i]p(x)\)

\(P(x+1)=fab_{n}(x+1)^{n+1}+fab_{n}(x+1)^{n+2}+fab_{n-1}(x+1)^{n+1}-1\)

\(p(x+1)=(fab_n+fab_{n-1})h_{n+1}(x+1)+fab_nh_{n+2}(x+1)-1\)

平移

\(p(x)=(fab_n+fab_{n-1})h_{n+1}(x)+fab_nh_{n+2}(x)-1\)

问题在于求\(h_{n}(x)\)

前面不是有\(h'(x+1)\times(x+1)=nh_n(x+1)+(n-k)\binom{n}{k}x^k\)

我们考虑在这里平移

\(h_n'(x)\times(x)=nh_n(x)+(n-k)\binom{n}{k}(x-1)^k\)

提取\([x^i]\)的系数

\([x^{i-1}]h'_n(x)=n[x^i]h_n(x)+(n-k)\binom{n}{k}(-1)^{k-i}\binom{k}{i}\)

\([x^{i}]ih_n(x)=n[x^i]h_n(x)+(n-k)\binom{n}{k}(-1)^{k-i}\binom{k}{i}\)

\([x^i]h_n(x)=\dfrac{(n-k)\binom{n}{k}(-1)^{k-i+1}\binom{k}{i}}{n-i}\)

至于\([x^k]g(x+1)\)如何求这里我们不妨用\(bostan-mori\)

代码似乎不好打就咕了

小结

对于\(\sum\limits_{i=0}^{n}[x^i]f(x)g^i(x)=f(g(x))=h(x)\)

我们可以利用平移\(g(x)\)来消除常数项,因此式子的求和上限变为\(k\)

也就是\(G(x+c)=g(x+c)\bmod x^{k+1}\),这里我们可以认为是先平移再截断再还原

但这样\(g(x)\)的求解变得异常复杂,可以利用求导等方式错位求解

单位根反演

我们称\(w^n=1\)为\(n\)次单位根

则\(w^n_k=e^{\frac{2k\pi i}{n}}\)

单位根反演即为\([n|k]=\dfrac{\sum\limits_{i=0}^{n-1}w^{ik}_n}{n}\)

似乎很显然,\(\dfrac{\sum\limits_{j=0}^{n-1}w^{jk}_n}{n}=\dfrac{\sum\limits_{j=0}^{n-1}e^{\frac{2kji\pi}{n}}}{n}\)

注意这是个等比数列,原式可化为,\(\dfrac{\dfrac{e^{2ki\pi}-1}{e^{\frac{2ki\pi}{n}}-1}}{n}\)

注意到\(e^{2ki\pi}-1=0\),只有当\([n|k]\)时分母也为\(0\)

因此\([n|k]=\dfrac{\sum\limits_{i=0}^{n-1}w^{ik}_n}{n}\)

逝一逝1

\(\sum\limits_{i=0,k|i}^n\binom{n}{i}\bmod (P=998244353)=\sum\limits_{i=0}^n[k|i]\binom{n}{i}=\sum\limits_{i=0}^n\frac{\sum\limits_{j=0}^{k-1}w_k^{ij}}{k}\binom{n}{i}=\frac{\sum\limits_{j=0}^{k-1}(w_k^j+1)^n}{k}\)

这里的\(w_k^j\)代原根即可

逝一逝2

如果这里的\(P\)无原根,这里的\(k\)是\(2\)的幂次

其实也差不多的,注意到我们发现\(f(x)=(x+1)^n\),这里我们就是求点值表示,直接任意模数\(NTT\)

其实对于大部分\(\sum\limits_{i=0,k|i}^n[x^i]f(x)\)似乎都可以这么做,\(n\)是\(f(x)\)的最高次

\(\sum\limits_{i=0}^n[k|i][x^i]f(x)=\sum\limits_{i=0}^n\frac{\sum\limits_{j=0}^{k-1}w_k^{ij}}{k}[x^i]f(x)=\frac{1}{k}\sum\limits_{j=0}^{k-1}f(w_k^j)\)

逝一逝3

\(\sum\limits_{i=0}^n[k|i]\binom{n}{i}fab_i\)

首先明确一点,对于矩阵\(A\)同样是满足二项式定理的

则原式化成\(\sum\limits_{i=0}^n[k|i]\binom{n}{i}A^i\)

然后再化成\(\sum\limits_{i=0}^n\frac{\sum\limits_{j=0}^{k-1}w_k^{ij}}{k}\binom{n}{i}A^i=\dfrac{1}{k}\sum\limits_{j=0}^{k-1}(w_k^jA+I)^n\)

标签:浅谈,limits,dfrac,sum,反演,fab,binom,brace
From: https://www.cnblogs.com/kid-magic/p/17402145.html

相关文章

  • 浅谈高中生物教学心得
         浅谈高中生物教学心得来源:用户上传   作者:王炳 生物课程是高中阶段重要的科学课程,是自然科学中一门基础学科。《普通高中生物课程标准(实验)》(以下简称《标准》)明确把提高学生生物科学素养作为高中生物新课程理念,要求每个学生不仅要获得生物科学......
  • 如何设计分布式缓存-浅谈
    最近在看极客兔兔大佬的七天用Go从零实现系列,其中有个分布式缓存geeCache,从设计的角度整理下自己的想法和思路。如何设计分布式缓存?设计一个分布式缓存系统,需要考虑资源控制、淘汰策略、并发、分布式节点通信等各个方面的问题。从上述方面考虑,我们需要实现的功能如下1、缓存功......
  • 浅谈原型——当前较为好用的原型制作网站以及原型制作的初次尝试
    在软件开发的过程中,原型的制作是避免不了的,“原型”的最基本定义是“最终产品的仿真或样本版本,用于发布之前方便测试。”原型的目标是在花费大量时间和金钱进入开发产品前,让开发者快速的了解产品创意。原型图对于是否能启动开发起着至关重要的作用。它还可以提前避免需要改进的......
  • 【♨Java基础】浅谈栈帧
    什么是栈帧栈帧是栈中的一个栈元素,是一种用于帮助虚拟机执行方法调用与方法执行的数据结构,当前线程中,每执行一个方法就会往栈中插入一个栈帧。栈帧本身是一种数据结构,封装了方法的局部变量表、动态链接信息、方法返回地址(即返回到方法的调用者)以及操作数栈。Java虚拟机栈(JavaV......
  • 浅谈如何使用 github.com/yuin/gopher-lua
    最近熟悉go项目时,发现项目中有用到github.com/yuin/gopher-lua这个包,之前并没有接触过,特意去看了官方文档和找了些网上的资料,特此记录下。本次介绍计划分为两篇文章,这一次主要介绍github.com/yuin/gopher-lua这个包的介绍以及基础使用,下一边将介绍github.com/yuin/goph......
  • MySql的数据存储之B+树(浅谈)
    一.MySql的实际存储位置B+树是MySql数据结构的主流存储方式,包括InnoDB和MYISAM引擎,它们的默认存储结构都是B+树了解B+树前,我们先要知道MySql的实际存储位置在哪?有人会说它存在我么的D盘或C盘的MySql文件夹的Data目录里,这个回答没错,我们在深入的了解一下呢?不管是在个人电脑上......
  • 浅谈Kafka2.8+在Windows下的搭建与使用
    前言:    周末空闲时间无意找到了一套个性化推荐的源码,整体项目运用了SSH,HDFS,Flume,Hive,Kafka,Spark,Scala等。运行时,本来通过spark计算业务埋点数据时,却发现本地没有Kafka。因为我一直也没使用过Kafka,所以也作为新人,浅谈以下Kafka的环境安装与分别在PHP,Scala中的使用。 对比:1......
  • 浅谈一下ThinkPHP5.1实现事务嵌套的特性
    前言:       在我们平时做的一个项目中,线上环境突然发现数据库被锁住。导致很多有关数据插入和修改的接口全都瘫痪,项目基于ThinkPHP5.1。报错的时候,我们发现了一条sql错误日志,如下。   根据错误信息提示,是说有一个事务回滚时没有找到savepoint的暂存点。所以问题应该......
  • 容斥与反演技巧(三)
    Min-Max容斥简单来说,由于\(\mathbbE[\max(x,y)]\neq\max(\mathbbE[x],\mathbbE[y])\),而如果计算\(\mathbbE[\min(x,y)]\)比计算\(\mathbbE[\max(x,y)]\)容易得多,我们就通常使用min-max容斥转为计算\(\mathbbE[\min(x,y)]\)。对于上面这种\(x,y\)的情况,实际上......
  • 浅谈 Node.js
    Node.js是什么?Node.js®是一个开源、跨平台的JavaScript运行时环境。官网:https://nodejs.org/zh-cn更多精彩内容,请微信搜索“前端爱好者“,戳我查看。Node.js≠JavaScriptNode.js中,没有BOM和DOM。Nodejs不是一门语言,只是一个跨平台的JavaScript运行时环境。Node......