链接

点击跳转

多项式乘法逆元

给你一个多项式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=g0​f0​,所以g0=f0−1g_0 = f_0^{-1}g0​=f0−1​;

然后0=g0f1+g1f00 = g_0f_1 + g_1f_00=g0​f1​+g1​f0​,所以g1=f0−1(−g0f1)g_1 = f_0^{-1}(-g_0f_1)g1​=f0−1​(−g0​f1​)

然后0=g0f2+g1f1+g2f00= g_0f_2 + g_1f_1 + g_2f_00=g0​f2​+g1​f1​+g2​f0​,所以g2=g0−1(−g0f2−g1f1)g_2 = g_0^{-1}(-g_0f_2-g_1f_1)g2​=g0−1​(−g0​f2​−g1​f1​)

快速求

现在普遍使用的是一个迭代算法,假设我已经知道了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 【模板】多项式乘法逆相关推荐

  1. P4239 任意模数多项式乘法逆(多项式/ MTT)

    P4239 任意模数多项式乘法逆 这个题目简直就是毒瘤,不过还好我们可以使用vector封装要不然真的没法看,现在我们就会用vector封装MTT了,然后有一个代码细节就是这里的求逆还是在模意义下的, ...

  2. 多项式求逆模板(NTT + mod)

    [模板]多项式乘法逆 /*Author : lifehappy */ #include <bits/stdc++.h>using namespace std;typedef long lo ...

  3. 【学习笔记】超简单的多项式求逆(含全套证明)

    整理的算法模板合集: ACM模板 目录 多项式求逆 一.分治FFT 二.倍增法及其证明 三.多项式求逆例题 P4238 [模板]多项式乘法逆 点我看多项式全家桶(●^◡_◡◡​^●) 多项式求逆 一. ...

  4. luogu P4238 多项式求逆 (模板题、FFT)

    luogu P4238 多项式求逆 (模板题.FFT) 手动博客搬家: 本文发表于20181125 13:21:46, 原地址https://blog.csdn.net/suncongbo/artic ...

  5. luogu P4726 多项式指数函数(模板题FFT、多项式求逆、多项式对数函数)

    luogu P4726 多项式指数函数(模板题FFT.多项式求逆.多项式对数函数) 手动博客搬家: 本文发表于20181127 08:39:42, 原地址https://blog.csdn.net/s ...

  6. luogu P4725 多项式对数函数 (模板题、FFT、多项式求逆、求导和积分)

    luogu P4725 多项式对数函数 (模板题.FFT.多项式求逆.求导和积分) 手动博客搬家: 本文发表于20181125 13:25:03, 原地址https://blog.csdn.net/s ...

  7. luogu P4512 多项式除法 (模板题、FFT、多项式求逆)

    luogu P4512 多项式除法 (模板题.FFT.多项式求逆) 手动博客搬家: 本文发表于20181206 14:42:53, 原地址https://blog.csdn.net/suncongbo ...

  8. 【luogu P3803】【模板】多项式乘法(NTT)

    [模板]多项式乘法(NTT) 题目链接:luogu P3803 题目大意 给你两个多项式,要你求它们的卷积. 思路 这次我们写 NTT 的做法. 它的优点就是它可以取模,而且不会有精度问题,而且会比 ...

  9. 洛谷 - P3803 【模板】多项式乘法(FFT/NTT)

    题目链接:点击查看 题目大意:给出两个多项式 F( x ) 和 G( x ) 的系数,求其卷积后的系数 题目分析:存一个FFT的模板,原理学不明白,数论和dp都扔给队友了,当个快乐的fw 代码: // ...

  10. P4245 【模板】任意模数多项式乘法

    P4245 [模板]任意模数多项式乘法 https://www.luogu.com.cn/blog/AzusaCat/solution-p4245 首先这类问题指的是对于一个非NTT模数,我们如何计算 ...

最新文章

  1. 如何在Oracle上使用AUTO_INCREMENT创建ID?
  2. oracle 快速复制一张表,并在此创建索引,日志及并行度
  3. 美方首次起诉4名俄黑客 其中两人系俄安全局官员
  4. 读spring源码(一)-ClassPathXmlApplicationContext-初始化
  5. Ajax跨域提交JSON和JSONP
  6. 实验五 类和对象-3
  7. BZOJ2137: submultiple(生成函数,二项式定理)
  8. HDU-6341 Problem J. Let Sudoku Rotate(dfs 剪枝)
  9. argparse模块
  10. Solaris 11中的变化
  11. 游戏音效的发展和制作游戏音效的意义
  12. 大学抢课python脚本_用彪悍的Python写了一个自动选课的脚本 | 学步园
  13. 7660生成负电压芯片
  14. 安卓一些错误经验积累
  15. 最强大脑记忆曲线(3)——设计页面
  16. 看雪学院将举办《安全开发者峰会》,有这11个安全议题
  17. php类的开发语言,php是什么开发语言
  18. “图形驱动程序无法找到兼容的图形硬件”的处理方式
  19. 查看本机mac地址/ ipconfig /all 的一点笔记
  20. nginx学习--nginx下的gzip与vary、预压缩、缓存、反向代理的结合

热门文章

  1. Global.asax 文件是什么
  2. 阿里云 OSS + CDN 部署静态网站配置
  3. 好了,我不想回深圳了~
  4. ServicePack自动补丁更新程序
  5. 星际争霸1-PvPGN战网架设参数
  6. 浩辰3D软件新手攻略:数据管理功能详解
  7. 【天池竞赛系列】菜鸟-需求预测与分仓规划初赛冠军解决方案
  8. astar不能用了_解锁不可切除肝癌治疗的新时代——“T+A”北美上市会纪要
  9. XCTF-攻防世界CTF平台-Web类——19、mfw(.Git源代码泄露、php的assert断言)
  10. 《嵌入式 - 深入剖析STM32》详解STM32时钟系统