• fft.ntt,生成函数,各种数和各种反演


     前置知识:

    一,导数

    倒数其实就是函数的斜率函数

    设D[f(x)]表示f(x)的导数,则满足

    $$1,D[f(x)]=limlimits_{delta x->infty}frac{f(x+delta x)-f(x)}{delta x}$$

    $$2,f(x+delta x)=f(x)+D[f(x)] imes delta x$$

    I,常用导数

    一次函数$f(x)=ax+b$

    $$D[f(x)]=a$$

     

    幂函数(多项式)$f(x)=x^{a}$

            $$D[f(x)]=limlimits_{Delta x->0}frac{f(x+Delta x)-f(x)}{Delta x} $$
             $$   =limlimits_{Delta x->0}frac{(x+Delta x)^{a}-x^{a}}{Delta x} $$
                $$     =limlimits_{Delta x->0}frac{sumlimits_{i=0}^{a}inom{a}{i}x^{i}Delta x^{n-i}-x^{a}}{Delta x} $$
                 $$     =limlimits_{Delta x->0}sumlimits_{i=0}^{a-1}inom{a}{i}x^{i}Delta x^{a-i-1} $$
                 $$     =ax^{a-1}$$

    多项式积分$$F(x)=frac{a}{k+1}x^{k+1}$$

     

    三角函数

    首先有$limlimits_{x->0}sin(x)=x limlimits_{x->0}cos(x)=1$

    $$f(x)=sin(ax+b)$$

    $$D[f(x)]=limlimits_{Delta x->0}frac{f(x+Delta x)-f(x)}{Delta x}$$
    $$=limlimits_{Delta x->0}frac{sin(a(x+Delta x)+b)-sin(ax+b)}{Delta x}$$
    $$=limlimits_{Delta x->0}frac{sin(ax+b+aDelta x)-sin(ax+b)}{Delta x}$$
    $$=limlimits_{Delta x->0}frac{sin(ax+b)cos(aDelta x)-cos(ax+b)sin(aDelta x) -sin(ax+b)}{Delta x}$$
    $$=limlimits_{Delta x->0}frac{sin(ax+b)-aDelta xcos(ax+b)-sin(ax+b)}{Delta x}$$
    $$=acos(ax+b)$$

     

    $$f(x)=cos(ax+b)$$

    同理得

    $$D[f(x)]=-asin(ax+b)$$

     

         有$$e=limlimits_{x->0}(1+frac{1}{n})^{n}$$

    指数函数$f(x)=a^{x}$
    $$D[f(x)]=limlimits_{Delta x->0}frac{f(x+Delta x)-f(x)}{Delta x}$$
               $$=limlimits_{Delta x->0}frac{a^{x+Delta x}-a^{x}}{Delta x}$$
               $$=limlimits_{Delta x->0}frac{a^{x}(a^{Delta x}-1)}{Delta x}$$
               $$=limlimits_{Delta x->0}frac{a^{x}}{frac{1}{a^{Delta x}-1}Delta x}$$

               $$=limlimits_{Delta x->0}frac{a^{x}}{frac{1}{a^{Delta x}-1}log_{a}a^{Delta x}}$$
               $$=limlimits_{Delta x->0}frac{a^{x}}{frac{1}{a^{Delta x}-1}log_{a}((a^{Delta x}-1)+1)}$$
               $$=limlimits_{Delta x->0}frac{a^{x}}{log_{a}((a^{Delta x}-1)+1)^{frac{1}{a^{Delta x}-1}}}$$
               $$=frac{a^{x}}{log_{a}e}$$
    $$=a^{x}lna$$

     

    对数函数$f(x)=log_{a}x$

    $$D[f(x)]=limlimits_{Delta x->0}frac{f(x+Delta x)-f(x)}{Delta x}$$

              $$=limlimits_{Delta x->0}frac{log_{a}(x+Delta x)-log_{a}(x)}{Delta x}$$
              $$=limlimits_{Delta x->0}frac{log_{a}(frac{x+Delta x}{x})}{Delta x}$$
              $$=limlimits_{Delta x->0}frac{frac{Delta x}{x}log_{a}(1+frac{Delta x}{x})}{x}$$

              $$=limlimits_{Delta x->0}frac{log_{a}(1+frac{Delta x}{x})^{frac{Delta x}{x}}}{x}$$
              $$=frac{log_{a}e}{xlog_{a}a}$$
              $$=frac{1}{xlna}$$

     

    复合函数$f(g(x))$

    $$D[f(g(x))]=limlimits_{Delta x->0}frac{f(g(x+Delta x))-f(g(x))}{Delta x}$$
    $$=limlimits_{Delta x->0}frac{f(g(x)+Delta xD[g(x)])-f(g(x))}{Delta x}$$
    $$=limlimits_{Delta x->0}frac{f(g(x))+Delta xD[f[g(x)]]D[g(x)]-f(g(x))}{Delta x}$$
    $$=D[f[g(x)]]D[g(x)]$$


    乘法$$D[f(x)g(x)]=D[f(x)]g(x)+D[g(x)]f(x)$$

    除法$$D[frac{f(x)}{g(x)}]=frac{D[f(x)]g(x)-D[g(x)]f(x)}{g^{2}(x)}$$

     

    II,泰勒展开

    $$f(x)=sumlimits_{i=0}^{n}frac{f^{(0)}(x_{0})(x-x_{0})^{i}}{i!}$$

    III,级数求和

    1,$$e^{x}=sumlimits_{n->+infty}frac{x^{i}}{i!}$$

    2,$$frac{1}{1-x}=limlimits_{n->+infty}sum_{i=0}^{n}x^{i}$$

    3,$$frac{1}{1+x}=limlimits_{n->+infty}sum_{i=0}^{n}(-1)^{i}x^{i}$$

    4,$$sin(x)=limlimits_{n->+infty}sum_{i=1}^{n}(-1)^{i-1}frac{x^{2i-1}}{(2i-1)!}$$

    5,$$cos(x)=limlimits_{n->+infty}sum_{i=0}^{n}(-1)^{i}frac{x^{2i}}{(2i)!}$$

    6,$$ln(x+1)=limlimits_{n->+infty}sum_{i=1}^{n}(-1)^{i-1}frac{x^{i}}{i}$$

    先放个fft和ntt的板子

     1 const double pi=acos(-1);
     2 struct cplx{
     3     double rl,ig;
     4     cplx(double r=0,double i=0){
     5         this->rl=r;
     6         this->ig=i;
     7     }
     8     friend cplx operator + (const cplx &a,const cplx &b){
     9         return cplx(a.rl+b.rl,a.ig+b.ig);
    10     }
    11     friend cplx operator - (const cplx &a,const cplx &b){
    12         return cplx(a.rl-b.rl,a.ig-b.ig);
    13     }
    14     friend cplx operator * (const cplx &a,const cplx &b){
    15         return cplx(a.rl*b.rl-a.ig*b.ig,a.rl*b.ig+b.rl*a.ig);
    16     }
    17 }a[300010],b[300010],c[300010];
    18 int n,m,bin=1,bct,len,v[300010];
    19 inline void fft(cplx *now,int l,int opt){
    20     for(int i=0;i<l;i++)
    21         if(i<v[i]) swap(now[i],now[v[i]]);
    22     for(int i=1;i<l;i<<=1){
    23         cplx wn=cplx(cos(pi/i),opt*sin(pi/i));
    24         for(int j=0;j<l;j+=(i<<1)){
    25             cplx w=cplx(1,0);
    26             for(int k=0;k<i;k++,w=w*wn){
    27                 cplx x=now[j+k];
    28                 cplx y=w*now[j+k+i];
    29                 now[j+k]=x+y;
    30                 now[j+k+i]=x-y;
    31             }
    32         }
    33     }
    34 }
    fft
     1 inline int qpow(int a,int b,int ans=1){
     2     for(;b;b>>=1,a=1ll*a*a%mod)
     3         if(b&1) ans=1ll*ans*a%mod;
     4     return ans;
     5 }
     6 inline void fft(int *now,int l,int opt){
     7     for(int i=0;i<l;i++)
     8         if(i<v[i]) swap(now[i],now[v[i]]);
     9     for(int i=1;i<l;i<<=1){
    10         ll wn=qpow(3,((opt*(mod-1))/(i<<1)+mod-1)%(mod-1));
    11         for(int j=0;j<l;j+=(i<<1)){
    12             ll w=1;
    13             for(int k=0;k<i;k++,w=w*wn%mod){
    14                 int x=now[j+k],y=w*now[j+k+i]%mod;
    15                 now[j+k]=(x+y)%mod;
    16                 now[j+k+i]=(x-y+mod)%mod;;
    17             }
    18         }
    19     }
    20 }
    ntt

    通常用来解决卷积形式的快速求解,即在$O(nlogn)$的复杂度内求解$F_{i}=sumlimits_{j=0}^{i}A_{j} imes B_{i-j}$

    一般要和化柿子结合

    二,各种数

    第一类斯特林数:$[^n_m]$ 表示 $n$ 个数分成 $m$ 个环的方案数

      递推式:$left[ ^k_n ight] = left[ ^k_{n-1} ight] imes (n-1)+ left[ ^{k-1}_{n-1} ight]$

      求一行:$[^n_m]$ 为 $prod_{i=0}^{n-1}(x+i)$ 的 $x^m$ 项系数,可以直接分治 $O(nlog^2n)$ 或者倍增 $O(nlogn)$

    第二类斯特林数:${^n_m}$ 表示 $n$ 个数分成 $m$ 个集合的方案数

      递推式:$left{ ^k_n ight} =left{ ^k_{n-1} ight} imes k+ left{ ^{k-1}_{n-1} ight}$

      求一行:$left { ^n_k ight }=sumlimits_{i=0}^{k} frac{(-1)^{k-i} imes i^n}{(k-i)! imes i!}$

    伯努利数:$sumlimits_{i=1}^{n} i^d = frac{1}{d+1} sumlimits_{i=0}^{d} C_{d+1}^{i} B_i n^{d+1-i}$ 里的系数 $B_i$

      递推式:$sumlimits_{k=0}^{n} C_{n+1}^{k} imes B_k =0$

      求所有:$B(x)=frac{x}{e^x-1}$,可以多项式求逆

    放几道例题

    求和

    题意:求$sumlimits_{i=0}^{n}sum_{j=0}{i}S(i,j)*2^{j}*j!$

    第二类斯特林数:$S(n,m)$表示n个元素划分为m个集合的方案数

    递推式:$left{ ^k_n ight} =left{ ^k_{n-1} ight} imes k+ left{ ^{k-1}_{n-1} ight}$

    求单点/一行:$left { ^n_k ight }=sumlimits_{i=0}^{k} frac{(-1)^{k-i} imes i^n}{(k-i)! imes i!}$

    应用:$x^n=sumlimits_{i=0}^{n} left { ^n_k ight } imes frac{x!}{(x-i)!}$

    化一下柿子

    $$f(n)=sumlimits_{i=0}^{n} sumlimits_{j=0}^{i} 2^j imes sumlimits_{k=0}^{j} (-1)^k imes frac{j!}{k! imes (j-k)!} imes (j-k)^i$$

    $$=sumlimits_{i=0}^{n} sumlimits_{j=0}^{i} 2^j imes j! imes sumlimits_{k=0}^{j} frac{(j-k)^i}{(j-k)!} imes frac{(-1)^k}{k!}$$

    $$=sumlimits_{j=0}^{n} 2^j imes j! imes sumlimits_{k=0}^{j} frac{sumlimits_{i=0}^{n}(j-k)^i}{(j-k)!} imes frac{(-1)^k}{k!}$$
    设$g(x)=sumlimits_{i=0}^{n}(j-k)^{i}$这是个等比数列求和,可以$O(1)$得到

    则$$=sumlimits_{j=0}^{n} 2^j imes j! imes sumlimits_{k=0}^{j} frac{g(x)}{(j-k)!} imes frac{(-1)^k}{k!}$$

    满足卷积形式,可以ntt了

     

    染色

    题意:序列的$n$个位置涂有颜色, 如果恰好出现了$s$次的颜色有$k$种, 则小$C$会产生$W_{k}$的愉悦度.求所有方案愉悦度之和

    考虑求解恰好出现了$s$次的颜色有$k$的方案数

    设$f(x)$表示恰好出现了$s$次的颜色恰好有$x$种的方案数

    $g(x)$表示恰好出现了$s$次的颜色至少有$x$种的方案数

    容易得到$g(x)=sumlimits_{i=x}^{n}C_{x}^{i}f(x)$

    二项式反演得到$f(x)=sumlimits_{i=x}^{n}(-1)^{i-x}C_{i}^{x}g(x)$

    可以ntt了

     

    城市规划

    题意:求$n$个点的带标号无向联通图的个数

    设$f(x)$表示$x$个点的带标号无向联通图的个数

    $g(x)$表示$x$个点带标号无向图的个数

    枚举$1$号点所在联通块,可以得到

    $g(x)=sumlimits_{i=1}^{x}C_{n-1}^{i-1}f(i)g(x-i)$

    接下来怎么化?我们把$f(x)$项提出

    有$frac{f(x)}{(x-1)!}=frac{g(x)}{(x-1)!}-sumlimits_{i=1}^{x-1}frac{f(i)}{(i-1)!} imes frac{g(x-i)}{(x-i)!}$

    有自转移的卷积形式,可以用分治$ntt$解决

  • 相关阅读:
    产生渐变色的view
    新建一个去除storyboard的项目
    绘制波形图
    文件系统扫描的工具类
    如何动态绘制时钟
    Xcode插件管理器Alcatraz的使用
    UITableView的headerView展开缩放动画
    POPSpring动画参数详解
    Java枚举类使用和总结
    Java判断不为空的工具类总结
  • 原文地址:https://www.cnblogs.com/mikufun-hzoi-cpp/p/12039036.html
Copyright © 2020-2023  润新知