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

 前置知识:

一,导数

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

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

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

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

I,常用导数

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

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

 

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

        $$D[f(x)]=\lim\limits_{\Delta x->0}\frac{f(x+\Delta x)-f(x)}{\Delta x} $$
         $$   =\lim\limits_{\Delta x->0}\frac{(x+\Delta x)^{a}-x^{a}}{\Delta x} $$
            $$     =\lim\limits_{\Delta x->0}\frac{\sum\limits_{i=0}^{a}\binom{a}{i}x^{i}\Delta x^{n-i}-x^{a}}{\Delta x} $$
             $$     =\lim\limits_{\Delta x->0}\sum\limits_{i=0}^{a-1}\binom{a}{i}x^{i}\Delta x^{a-i-1} $$
             $$     =ax^{a-1}$$

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

 

三角函数

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

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

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

 

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

同理得

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

 

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

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

           $$=\lim\limits_{\Delta x->0}\frac{a^{x}}{\frac{1}{a^{\Delta x}-1}log_{a}a^{\Delta x}}$$
           $$=\lim\limits_{\Delta x->0}\frac{a^{x}}{\frac{1}{a^{\Delta x}-1}log_{a}((a^{\Delta x}-1)+1)}$$
           $$=\lim\limits_{\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)]=\lim\limits_{\Delta x->0}\frac{f(x+\Delta x)-f(x)}{\Delta x}$$

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

          $$=\lim\limits_{\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))]=\lim\limits_{\Delta x->0}\frac{f(g(x+\Delta x))-f(g(x))}{\Delta x}$$
$$=\lim\limits_{\Delta x->0}\frac{f(g(x)+\Delta xD[g(x)])-f(g(x))}{\Delta x}$$
$$=\lim\limits_{\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)=\sum\limits_{i=0}^{n}\frac{f^{(0)}(x_{0})(x-x_{0})^{i}}{i!}$$

III,级数求和

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

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

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

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

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

6,$$ln(x+1)=\lim\limits_{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}=\sum\limits_{j=0}^{i}A_{j}\times B_{i-j}$

一般要和化柿子结合

二,各种数

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

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

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

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

  递推式:$\left\{ ^k_n \right\} =\left\{ ^k_{n-1} \right\} \times k+ \left\{ ^{k-1}_{n-1} \right\}$

  求一行:$\left \{ ^n_k \right \}=\sum\limits_{i=0}^{k} \frac{(-1)^{k-i} \times i^n}{(k-i)! \times i!}$

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

  递推式:$\sum\limits_{k=0}^{n} C_{n+1}^{k} \times B_k =0$

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

放几道例题

求和

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

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

递推式:$\left\{ ^k_n \right\} =\left\{ ^k_{n-1} \right\} \times k+ \left\{ ^{k-1}_{n-1} \right\}$

求单点/一行:$\left \{ ^n_k \right \}=\sum\limits_{i=0}^{k} \frac{(-1)^{k-i} \times i^n}{(k-i)! \times i!}$

应用:$x^n=\sum\limits_{i=0}^{n} \left \{ ^n_k \right \} \times \frac{x!}{(x-i)!}$

化一下柿子

$$f(n)=\sum\limits_{i=0}^{n} \sum\limits_{j=0}^{i} 2^j \times \sum\limits_{k=0}^{j} (-1)^k \times \frac{j!}{k! \times (j-k)!} \times (j-k)^i$$

$$=\sum\limits_{i=0}^{n} \sum\limits_{j=0}^{i} 2^j \times j! \times \sum\limits_{k=0}^{j} \frac{(j-k)^i}{(j-k)!} \times \frac{(-1)^k}{k!}$$

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

则$$=\sum\limits_{j=0}^{n} 2^j \times j! \times \sum\limits_{k=0}^{j} \frac{g(x)}{(j-k)!} \times \frac{(-1)^k}{k!}$$

满足卷积形式,可以ntt了

 

染色

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

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

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

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

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

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

可以ntt了

 

城市规划

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

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

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

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

$g(x)=\sum\limits_{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)!}-\sum\limits_{i=1}^{x-1}\frac{f(i)}{(i-1)!}\times \frac{g(x-i)}{(x-i)!}$

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

posted @ 2019-12-14 16:18  mikufun♘  阅读(337)  评论(0编辑  收藏  举报