【学习笔记】Bostan-Mori 算法
1.【学习笔记】Kruskal 重构树2.【学习笔记】网络流3.【学习笔记】高级数据结构4.【学习笔记】线性基5.【学习笔记】Link Cut Tree6.【学习笔记】字符串后缀算法7.【学习笔记】字符串回文算法8.【学习笔记】组合数学9.【学习笔记】多项式 1:基础操作10.【学习笔记】多项式 2:集合幂级数11.【学习笔记】多项式 3:多项式运算12.【学习笔记】Prufer 序列13.【学习笔记】多项式 4:生成函数14.【学习笔记】DP 套 DP15.【学习笔记】图的连通性16.【学习笔记】差分约束17.【学习笔记】长链剖分18.【学习笔记】2-SAT19.【学习笔记】根号算法20.【学习笔记】Primal-Dual 原始对偶算法
21.【学习笔记】Bostan-Mori 算法
22.【学习笔记】狄利克雷卷积与高级筛法23.【学习笔记】DP 优化 1:基础优化24.【学习笔记】DP 优化 2:动态 DP25.【学习笔记】李超线段树26.【学习笔记】优化建图27.【学习笔记】Segment Tree Beats28.【学习笔记】插头 DP29.【学习笔记】任意模数多项式乘法30.【学习笔记】SG 函数与 SG 定理31.【学习笔记】类欧几里得算法32.【学习笔记】狄利克雷前/后缀和/差分33.【学习笔记】DSU on Tree34.【学习笔记】DP 优化 3:闵可夫斯基和优化 DP35.【学习笔记】笛卡尔树36.【学习笔记】Miller-Rabin 算法37.【学习笔记】DP 优化 4:决策单调性38.【学习笔记】DP 优化 5:wqs 二分优化 DP39.【学习笔记】边分治40.【学习笔记】KMP 相关算法41.【学习笔记】概率生成函数42.【学习笔记】离散对数和剩余其实是用于常系数齐次线性递推,只不过本篇博文只讲解如何求分式的高次项系数。
已知多项式 ,要求:,其中 的次数为 ,。
算法流程如下:
分式上下同乘 ,也就是 的奇次项都取反的多项式,得到:
分母部分一个重要的性质是,由于奇次项系数为相反数,那么最终卷积的结果奇次项都为 ,所以 ,把 奇偶分类,变成 ,这样可以得到:
注意到 只会由分子中某个多项式贡献而来,之后上下的自变量就可以由 变为 ,具体地:
每次减半,最终 时输出常数项的结果即可。注意到每次卷积规模扩大后只取一半系数使规模减小,所以复杂度 。
inline void Bostan_Mori(int N,Poly F,Poly G){
int L=F.deg;
Poly H,A,B;
F.set(L<<1),G.set(L<<1),H.set(L<<1),A.set(L<<1),B.set(L<<1);
while(N){
H=G;
for(int i=1;i<L;i+=2) H[i]=mod-H[i];
F.NTT(L<<1,1),G.NTT(L<<1,1),H.NTT(L<<1,1);
for(int i=0;i<L<<1;++i) A[i]=F[i]*H[i]%mod,B[i]=G[i]*H[i]%mod;
A.NTT(L<<1,0),B.NTT(L<<1,0);
for(int i=0;i<L;++i) B[i]=B[i*2];
for(int i=0;i<L;++i) A[i]=A[2*i+(N&1)];
A.clear(L,(L<<1)-1),B.clear(L,(L<<1)-1);
F=A,G=B;
N>>=1;
}
printf("%llu\n",F[0]*q_pow((int)G[0],mod-2,mod)%mod);
}
作者:SoyTony
出处:https://www.cnblogs.com/SoyTony/p/Learning_Notes_about_Bostan-Mori_Algorithm.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
合集:
学习笔记
分类:
数学/多项式/Bostan-Mori 算法
, A/学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效