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的板子
const double pi=acos(-);
struct cplx{
double rl,ig;
cplx(double r=,double i=){
this->rl=r;
this->ig=i;
}
friend cplx operator + (const cplx &a,const cplx &b){
return cplx(a.rl+b.rl,a.ig+b.ig);
}
friend cplx operator - (const cplx &a,const cplx &b){
return cplx(a.rl-b.rl,a.ig-b.ig);
}
friend cplx operator * (const cplx &a,const cplx &b){
return cplx(a.rl*b.rl-a.ig*b.ig,a.rl*b.ig+b.rl*a.ig);
}
}a[],b[],c[];
int n,m,bin=,bct,len,v[];
inline void fft(cplx *now,int l,int opt){
for(int i=;i<l;i++)
if(i<v[i]) swap(now[i],now[v[i]]);
for(int i=;i<l;i<<=){
cplx wn=cplx(cos(pi/i),opt*sin(pi/i));
for(int j=;j<l;j+=(i<<)){
cplx w=cplx(,);
for(int k=;k<i;k++,w=w*wn){
cplx x=now[j+k];
cplx y=w*now[j+k+i];
now[j+k]=x+y;
now[j+k+i]=x-y;
}
}
}
}
fft
inline int qpow(int a,int b,int ans=){
for(;b;b>>=,a=1ll*a*a%mod)
if(b&) ans=1ll*ans*a%mod;
return ans;
}
inline void fft(int *now,int l,int opt){
for(int i=;i<l;i++)
if(i<v[i]) swap(now[i],now[v[i]]);
for(int i=;i<l;i<<=){
ll wn=qpow(,((opt*(mod-))/(i<<)+mod-)%(mod-));
for(int j=;j<l;j+=(i<<)){
ll w=;
for(int k=;k<i;k++,w=w*wn%mod){
int x=now[j+k],y=w*now[j+k+i]%mod;
now[j+k]=(x+y)%mod;
now[j+k+i]=(x-y+mod)%mod;;
}
}
}
}
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$解决
fft.ntt,生成函数,各种数和各种反演的更多相关文章
- FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅰ
众所周知,tzc 在 2019 年(12 月 31 日)就第一次开始接触多项式相关算法,可到 2021 年(1 月 1 日)才开始写这篇 blog. 感觉自己开了个大坑( 多项式 多项式乘法 好吧这个 ...
- FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅲ
第三波,走起~~ FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅰ FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅱ 单位根反演 今天打多校时 1002 被卡科技了 ...
- 各种数和各种反演(所谓FFT的前置知识?)
每次问NC做多项式的题需要什么知识点. 各种数. 各种反演. 多项式全家桶. 然后我就一个一个地学知识点.然而还差好多,学到后面的前面的已经忘了(可能是我太菜吧不是谁都是NC啊) 然后发现每个知识点基 ...
- FFT/NTT基础题总结
在学各种数各种反演之前把以前做的$FFT$/$NTT$的题整理一遍 还请数论$dalao$口下留情 T1快速傅立叶之二 题目中要求求出 $c_k=\sum\limits_{i=k}^{n-1}a_i* ...
- 数学杂烩总结(多项式/形式幂级数+FWT+特征多项式+生成函数+斯特林数+二次剩余+单位根反演+置换群)
数学杂烩总结(多项式/形式幂级数+FWT+特征多项式+生成函数+斯特林数+二次剩余+单位根反演+置换群) 因为不会做目录所以请善用ctrl+F 本来想的是笔记之类的,写着写着就变成了资源整理 一些有的 ...
- $FFT/NTT/FWT$题单&简要题解
打算写一个多项式总结. 虽然自己菜得太真实了. 好像四级标题太小了,下次写博客的时候再考虑一下. 模板 \(FFT\)模板 #include <iostream> #include < ...
- FFT \ NTT总结(多项式的构造方法)
前言.FFT NTT 算法 网上有很多,这里不再赘述. 模板见我的代码库: FFT:戳我 NTT:戳我 正经向:FFT题目解题思路 \(FFT\)这个玩意不可能直接裸考的..... 其实一般\(FF ...
- [学习笔记&教程] 信号, 集合, 多项式, 以及各种卷积性变换 (FFT,NTT,FWT,FMT)
目录 信号, 集合, 多项式, 以及卷积性变换 卷积 卷积性变换 傅里叶变换与信号 引入: 信号分析 变换的基础: 复数 傅里叶变换 离散傅里叶变换 FFT 与多项式 \(n\) 次单位复根 消去引理 ...
- FFT/NTT/MTT学习笔记
FFT/NTT/MTT Tags:数学 作业部落 评论地址 前言 这是网上的优秀博客 并不建议初学者看我的博客,因为我也不是很了解FFT的具体原理 一.概述 两个多项式相乘,不用\(N^2\),通过\ ...
随机推荐
- 数据仓库009 - SQL命令实战 - where GROUP BY join 部门综合案例
一.where条件 WHERE 子句中主要的运算符,可以在 WHERE 子句中使用,如下表: 运算符 描述 = 等于 <> 不等于.注释:在 SQL 的一些版本中,该操作符可被写成 != ...
- Date以及LocalDateTime格式化
public static void main(String[] args) { LocalDateTime local = LocalDateTime.now(); Date date = new ...
- 如何让 FFmpeg 支持异步并行转码、截图等等操作?
直接贴代码了: ffmpegTest02.cs public partial class ffmpegTest02 : FormBase { private static readonly strin ...
- IDEA 日常小技巧
原文首发于 studyidea.cn点击查看更多技巧 适用于 IDEA 2019.2 之前版本 ,2019.2 版本以下功能默认开启. Surround a selection with a quot ...
- centos6利用cgroup冻结一个程序运行
操作步骤: 安装cgroup服务 yum install libcgroup 配置cgroup vim /etc/cgconfig.conf group stopit{ #添加一个cgroup组 fr ...
- 『珂朵莉树 Old Driver Tree』
珂朵莉树 珂朵莉树其实不是树,只是一个借助平衡树实现的数据结构,主要是对于有区间赋值的数据结构题,可以用很暴力的代码很高效地完成任务,当然这是建立在数据随机的基础上的. 即使数据不是随机的,写一个珂朵 ...
- NIO你真正了解多少?
解释一下java.io.Serializable接口 类通过实现 Java.io.Serializable 接口以启用其序列化功能.未实现此接口的类将无法使其任何状态序列化或反序列化. IO操作最佳实 ...
- Java生鲜电商平台-源码地址公布与思考和建议
Java生鲜电商平台-源码地址公布与思考和建议 说明:今天是承诺给大家的最后一天,我公布了github地址(QQ群里面有).诚然这个是我的计划中的事情,但是有以下几点思考请大家共勉: 1. 你下了那么 ...
- Java自学-I/O 控制台输入流System.in
Java 控制台输入流 System.in和Scanner System.out 是常用的在控制台输出数据的 System.in 可以从控制台输入数据 步骤 1 : System.in package ...
- SAP MM 公司间STO里外向交货单与内向交货单里序列号对应关系
SAP MM 公司间STO里外向交货单与内向交货单里序列号对应关系 笔者所在的A项目,后勤模块里有启用HU管理,序列号管理,批次管理等功能,以实现各个业务场景下的追溯. 公司间转储订单流程里,如果是整 ...