前置知识:

一,导数

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

设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,常用导数

 

 

 

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

 

 

 

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}$

一般要和化柿子结合

放几道例题

化一下柿子

$$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了

 

 

12-25 21:38
查看更多