luogu P4238 【模板】多项式乘法逆
链接
点击跳转
多项式乘法逆元
给你一个多项式F(x)F(x)F(x),你要找出一个多项式G(x)G(x)G(x)使得F(x)G(x)=1F(x)G(x) = 1F(x)G(x)=1
逆存在的充要条件是F(x)F(x)F(x)的常数项部不等于000
暴力求
一种很暴力的O(n2)O(n^2)O(n2)做法是这样的:
首先1=g0f01 = g_0 f_01=g0f0,所以g0=f0−1g_0 = f_0^{-1}g0=f0−1;
然后0=g0f1+g1f00 = g_0f_1 + g_1f_00=g0f1+g1f0,所以g1=f0−1(−g0f1)g_1 = f_0^{-1}(-g_0f_1)g1=f0−1(−g0f1)
然后0=g0f2+g1f1+g2f00= g_0f_2 + g_1f_1 + g_2f_00=g0f2+g1f1+g2f0,所以g2=g0−1(−g0f2−g1f1)g_2 = g_0^{-1}(-g_0f_2-g_1f_1)g2=g0−1(−g0f2−g1f1)
快速求
现在普遍使用的是一个迭代算法,假设我已经知道了g0,g1,…,gn−1g_0,g_1,\dots,g_{n-1}g0,g1,…,gn−1
假设已知多项式H(x)H(x)H(x),h0=g0,h1=g1,…,hn−1=gn−1,hn=0,hn+1=0,hn+2=0,…h_0=g_0,h_1=g_1,\dots,h_{n-1}=g_{n-1},h_n=0,h_{n+1}=0,h_{n+2}=0,\dotsh0=g0,h1=g1,…,hn−1=gn−1,hn=0,hn+1=0,hn+2=0,…
那么显然F(x)H(x)F(x)H(x)F(x)H(x)的前nnn个系数为1,0,0,0,…,01,0,0,0,\dots,01,0,0,0,…,0,但是后面的系数不一定是000
现在我需要继续推出H(x)H(x)H(x)后面的系数
因为H(x)−G(x)H(x)-G(x)H(x)−G(x)的前nnn个系数都是000,所以(H(x)−G(x))2(H(x)-G(x))^2(H(x)−G(x))2的前2n2n2n项系数都是000,所以H2(x)+G2(x)−2H(x)G(x)H^2(x)+G^2(x)-2H(x)G(x)H2(x)+G2(x)−2H(x)G(x)的前2n2n2n项系数都是000
给这个东西乘以F2(x)F^2(x)F2(x),得到H2(x)F2(x)+G2(x)F2(x)−2H(x)G(x)F2(x)H^2(x)F^2(x)+G^2(x)F^2(x)-2H(x)G(x)F^2(x)H2(x)F2(x)+G2(x)F2(x)−2H(x)G(x)F2(x)的前2n2n2n项系数都为000
而F(x)G(x)=1F(x)G(x)=1F(x)G(x)=1,所以H2(x)F2(x)+1−2H(x)F(x)H^2(x)F^2(x)+1-2H(x)F(x)H2(x)F2(x)+1−2H(x)F(x)的前2n2n2n项系数都为000
即F(x)(2H(x)−F(x)H2(x))−1F(x)(2H(x)-F(x)H^2(x)) - 1F(x)(2H(x)−F(x)H2(x))−1得前2n2n2n项系数都为000,即F(x)(2H(x)−F(x)H2(x))F(x)(2H(x)-F(x)H^2(x))F(x)(2H(x)−F(x)H2(x))得前2n2n2n项系数为1,0,0,0,...,01,0,0,0,...,01,0,0,0,...,0
可以发现,本来H(x)H(x)H(x)只能让F(x)H(x)F(x)H(x)F(x)H(x)的前nnn项系数为1,0,0,…1,0,0,\dots1,0,0,…,但是现在我找到了(2H(x)−F(x)H2(x))(2H(x)-F(x)H^2(x))(2H(x)−F(x)H2(x)),乘以F(x)F(x)F(x)之后可以让前2n2n2n项系数为1,0,0,…1,0,0,\dots1,0,0,…
上述推导用数学语言可以这样描述:
F(x)H(x)≡1(modxn)F(x)H(x)−1≡0(modxn)(F(x)H(x)−1)2≡0(modx2n)F2(x)H2(x)−2F(x)H(x)+1≡0(modx2n)F(x)(2H(x)−F(x)H2(x))≡1(modx2n)F(x)H(x) \equiv 1 (\mod x^n) \\ F(x)H(x)-1 \equiv 0 (\mod x^n) \\ (F(x)H(x)-1)^2 \equiv 0 (\mod x^{2n}) \\ F^2(x)H^2(x) -2F(x)H(x) + 1 \equiv 0 (\mod x^{2n}) \\ F(x)(2H(x)-F(x)H^2(x)) \equiv 1 (\mod x^{2n}) F(x)H(x)≡1(modxn)F(x)H(x)−1≡0(modxn)(F(x)H(x)−1)2≡0(modx2n)F2(x)H2(x)−2F(x)H(x)+1≡0(modx2n)F(x)(2H(x)−F(x)H2(x))≡1(modx2n)
代码
struct Formal_Power_Series_inv
{ll a[maxn], b[maxn], n, A[maxn], B[maxn];void run(){ll i, now, N;b[0]=em.inv(a[0],mod);ntt.init(n), N=ntt.n;for(now=2;now<=N;now<<=1){rep(i,0,now-1)A[i]=a[i], B[i]=b[i];ntt.init(2*now-1);ntt.ntt(A,1), ntt.ntt(B,1);rep(i,0,ntt.n-1)B[i]=B[i]*B[i]%mod*A[i]%mod;ntt.ntt(B,-1);rep(i,0,now-1)b[i]=(2*b[i]-B[i])%mod;}}
}fpsi;
luogu P4238 【模板】多项式乘法逆相关推荐
- P4239 任意模数多项式乘法逆(多项式/ MTT)
P4239 任意模数多项式乘法逆 这个题目简直就是毒瘤,不过还好我们可以使用vector封装要不然真的没法看,现在我们就会用vector封装MTT了,然后有一个代码细节就是这里的求逆还是在模意义下的, ...
- 多项式求逆模板(NTT + mod)
[模板]多项式乘法逆 /*Author : lifehappy */ #include <bits/stdc++.h>using namespace std;typedef long lo ...
- 【学习笔记】超简单的多项式求逆(含全套证明)
整理的算法模板合集: ACM模板 目录 多项式求逆 一.分治FFT 二.倍增法及其证明 三.多项式求逆例题 P4238 [模板]多项式乘法逆 点我看多项式全家桶(●^◡_◡◡^●) 多项式求逆 一. ...
- luogu P4238 多项式求逆 (模板题、FFT)
luogu P4238 多项式求逆 (模板题.FFT) 手动博客搬家: 本文发表于20181125 13:21:46, 原地址https://blog.csdn.net/suncongbo/artic ...
- luogu P4726 多项式指数函数(模板题FFT、多项式求逆、多项式对数函数)
luogu P4726 多项式指数函数(模板题FFT.多项式求逆.多项式对数函数) 手动博客搬家: 本文发表于20181127 08:39:42, 原地址https://blog.csdn.net/s ...
- luogu P4725 多项式对数函数 (模板题、FFT、多项式求逆、求导和积分)
luogu P4725 多项式对数函数 (模板题.FFT.多项式求逆.求导和积分) 手动博客搬家: 本文发表于20181125 13:25:03, 原地址https://blog.csdn.net/s ...
- luogu P4512 多项式除法 (模板题、FFT、多项式求逆)
luogu P4512 多项式除法 (模板题.FFT.多项式求逆) 手动博客搬家: 本文发表于20181206 14:42:53, 原地址https://blog.csdn.net/suncongbo ...
- 【luogu P3803】【模板】多项式乘法(NTT)
[模板]多项式乘法(NTT) 题目链接:luogu P3803 题目大意 给你两个多项式,要你求它们的卷积. 思路 这次我们写 NTT 的做法. 它的优点就是它可以取模,而且不会有精度问题,而且会比 ...
- 洛谷 - P3803 【模板】多项式乘法(FFT/NTT)
题目链接:点击查看 题目大意:给出两个多项式 F( x ) 和 G( x ) 的系数,求其卷积后的系数 题目分析:存一个FFT的模板,原理学不明白,数论和dp都扔给队友了,当个快乐的fw 代码: // ...
- P4245 【模板】任意模数多项式乘法
P4245 [模板]任意模数多项式乘法 https://www.luogu.com.cn/blog/AzusaCat/solution-p4245 首先这类问题指的是对于一个非NTT模数,我们如何计算 ...
最新文章
- 如何在Oracle上使用AUTO_INCREMENT创建ID?
- oracle 快速复制一张表,并在此创建索引,日志及并行度
- 美方首次起诉4名俄黑客 其中两人系俄安全局官员
- 读spring源码(一)-ClassPathXmlApplicationContext-初始化
- Ajax跨域提交JSON和JSONP
- 实验五 类和对象-3
- BZOJ2137: submultiple(生成函数,二项式定理)
- HDU-6341 Problem J. Let Sudoku Rotate(dfs 剪枝)
- argparse模块
- Solaris 11中的变化
- 游戏音效的发展和制作游戏音效的意义
- 大学抢课python脚本_用彪悍的Python写了一个自动选课的脚本 | 学步园
- 7660生成负电压芯片
- 安卓一些错误经验积累
- 最强大脑记忆曲线(3)——设计页面
- 看雪学院将举办《安全开发者峰会》,有这11个安全议题
- php类的开发语言,php是什么开发语言
- “图形驱动程序无法找到兼容的图形硬件”的处理方式
- 查看本机mac地址/ ipconfig /all 的一点笔记
- nginx学习--nginx下的gzip与vary、预压缩、缓存、反向代理的结合
热门文章
- Global.asax 文件是什么
- 阿里云 OSS + CDN 部署静态网站配置
- 好了,我不想回深圳了~
- ServicePack自动补丁更新程序
- 星际争霸1-PvPGN战网架设参数
- 浩辰3D软件新手攻略:数据管理功能详解
- 【天池竞赛系列】菜鸟-需求预测与分仓规划初赛冠军解决方案
- astar不能用了_解锁不可切除肝癌治疗的新时代——“T+A”北美上市会纪要
- XCTF-攻防世界CTF平台-Web类——19、mfw(.Git源代码泄露、php的assert断言)
- 《嵌入式 - 深入剖析STM32》详解STM32时钟系统