【learning】多项式开根详解+模板
概述
多项式开跟是一个非常重要的知识点,许多多项式题目都要用到这一算法。
用快速数论变换,多项式求逆元和倍增法可以在$O(n log n)$的时间复杂度下求出一个$n$次多项式的开根。
前置技能
快速数论变换(NTT),多项式求逆元,二次剩余。
多项式的开根
给定一个多项式$A(x)$,其次数为$deg_A$,若存在一个多项式$B(x)$,使其满足$deg_B≤deg_A$,且$ B^2(x) \equiv A(x) (mod\ x^n)$,则$B(x)$即为$A(x)$在模$x^n$意义下的的开根。
求多项式的开根
我们不妨假设,$n=2^k,k∈N$。
若$n=1$,则$b_0^2 \equiv a_0(mod\ x)$。其中$a_0$,$b_0$表示多项式$A$和多项式$B$的常数项。
若需要求出$b_0$,直接用二次剩余求出即可。(不过由于大部分题目公式特别优美,常数项通常为0)
当$n>1$时:
我们假设在模$x^{\frac{n}{2}}$的意义下$A(x)$的开根$B'(x)$我们已经求得。
依据定义,则有
$B^2(x)\equiv A(x) (mod\ x^{n})$ $(1)$
因为多项式$B'(x)$满足
$B'^2(x)\equiv A(x) (mod\ x^{\frac{n}{2}})$ $(2)$
将$(1)-(2)$,得
$B^2(x)-B'^2(x)\equiv 0(mod\ x^{\frac{n}{2}})$ $(3)$
我们用平方差公式将$(3)$展开
$(B(x)+B'(x))(B(x)-B'(x))\equiv 0(mod\ x^{\frac{n}{2}})$ $(4)$
然后我们会发现多项式$B(x)$有两个解,下面考虑其中一种情况
$B(x)-B'(x)\equiv 0(mod\ x^{\frac{n}{2}})$ $(5)$
我们将$(5)$式同余符号两边平方,得
$B^2(x)-2B(x)B'(x)+B'^2(x)\equiv 0(mod\ x^n)$ $(6)$
考虑到式$(1)$,我们将式$(1)$代入式$(6)$,得
$A(x)-2B(x)B'(x)+B'^2(x)\equiv 0(mod\ x^n)$ $(7)$
最后对式 $(7)$进行移项,得到
$B(x)\equiv \dfrac{A(x)+B'^2(x)}{2B'(x)} (mod\ x^n)$ $(8)$
显然,我们可以用上述式子,通过倍增,求出n次项的$B(x)$。
这一步的计算我们可以使用多项式求逆元和$NTT$,时间复杂度为$O(n log n)$。
我们可以通过递归的方法,求解出最终的$N$次项的$B(x)$
时间复杂度$T(n)=T(\dfrac{n}{2})+O(n log n)=O(n log n)$。
模板如下:(暂时还没有)
【learning】多项式开根详解+模板的更多相关文章
- 多项式求逆元详解+模板 【洛谷P4238】多项式求逆
概述 多项式求逆元是一个非常重要的知识点,许多多项式操作都需要用到该算法,包括多项式取模,除法,开跟,求ln,求exp,快速幂.用快速傅里叶变换和倍增法可以在$O(n log n)$的时间复杂度下求出 ...
- BZOJ 3625 [Codeforces Round #250]小朋友和二叉树 ——NTT 多项式求逆 多项式开根
生成函数又有奇妙的性质. $F(x)=C(x)*F(x)*F(x)+1$ 然后大力解方程,得到一个带根号的式子. 多项式开根有解只与常数项有关. 发现两个解只有一个是成立的. 然后多项式开根.求逆. ...
- P5277 【模板】多项式开根(加强版)(bsgs or Cipolla)
题面 传送门 题解 首先你得会多项式开根->这里 其次你得会解形如 \[x^2\equiv a \pmod{p}\] 的方程 这里有两种方法,一个是\(bsgs\)(这里),还有一种是\(Cip ...
- FFT模板 生成函数 原根 多项式求逆 多项式开根
FFT #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> ...
- 【XSY2730】Ball 多项式exp 多项式ln 多项式开根 常系数线性递推 DP
题目大意 一行有\(n\)个球,现在将这些球分成\(k\) 组,每组可以有一个球或相邻两个球.一个球只能在至多一个组中(可以不在任何组中).求对于\(1\leq k\leq m\)的所有\(k\)分别 ...
- 【BZOJ3625】【codeforces438E】小朋友和二叉树 生成函数+多项式求逆+多项式开根
首先,我们构造一个函数$G(x)$,若存在$k∈C$,则$[x^k]G(x)=1$. 不妨设$F(x)$为最终答案的生成函数,则$[x^n]F(x)$即为权值为$n$的神犇二叉树个数. 不难推导出,$ ...
- CF438E The Child and Binary Tree(生成函数+多项式开根+多项式求逆)
传送门 可以……这很多项式开根模板……而且也完全不知道大佬们怎么把这题的式子推出来的…… 首先,这题需要多项式开根和多项式求逆.多项式求逆看这里->这里,这里讲一讲多项式开根 多项式开方:已知多 ...
- [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆)
[BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆) 题面 一棵二叉树的所有点的点权都是给定的集合中的一个数. 让你求出1到m中所有权 ...
- Codeforces 250 E. The Child and Binary Tree [多项式开根 生成函数]
CF Round250 E. The Child and Binary Tree 题意:n种权值集合C, 求点权值和为1...m的二叉树的个数, 形态不同的二叉树不同. 也就是说:不带标号,孩子有序 ...
随机推荐
- 笑话库存加网址http://www.jokeji.cn/list18_11.htm
19.富二代王晓伟成绩很差,老爸想给他找个家教老爸:“儿子,想找什么样的家教啊?”儿子:“要漂亮的,女的,衣服不能太保守,花样要多!”老爸:“儿子,你TM指的是岛国的苍老师吗?”@呦呦ta爹 20.哥 ...
- AWS–Sysops notes
Monitoring, Metrics and Analysis 1.CouldWatch Introduction2.EC2 Status Troubleshooting3.Create A Cou ...
- WINDOWS CLUSTER -- 时间不同步导致的群集问题
故障描述,重启服务器后,发现该重启节点未成功加入到Windows群集中,导致该节点上的Alwayson服务也受影响处于“正在解析”状态,尝试重启cluster服务,发现无效,查看windows日志,发 ...
- C#通过字符串名称来调用对应字符串名称的方法
前段时间在一个项目中,在一个地方要将函数所在类中的方法都调用一遍,但是否调用要通过配置文件中的内容决定.所以为了减少代码量,在网上查了相关信息,终于成功的将其应用到了项目中,我在这里将我做的一个简单例 ...
- cesiumjs
官网 https://cesium.com/ https://cesiumjs.org/Cesium/ 论坛 http://cesium.coinidea.com/ 中文网 http://cesium ...
- UWP Background过渡动画
首先说两件事: 1.大爆炸我还记着呢,先欠着吧... 2.博客搬家啦,新地址:https://blog.ultrabluefire.cn/ ==========下面是正文========== 前些日子 ...
- 「PKUSC2018」最大前缀和(状压dp)
前言 考试被\(hyj\)吊着打... Solution 考虑一下如果前缀和如果在某一个位置的后面的任意一个前缀和都<=0,肯定这就是最大的. 然后这样子就考虑左右两边的状压dp,然后就好了. ...
- 杀掉所有 skynet 进程
ps aux | grep skynet | awk '/config/{print $2}' | xargs kill
- 二进制入门-打造Linux shellcode基础篇
0x01 前言 本文的目的不是为了介绍如何进行恶意的破坏性活动,而是为了教会你如何去防御此类破坏性活动,以帮助你扩大知识范围,完善自己的技能,如有读者运用本文所学技术从事破坏性活动,本人概不负责. ...
- InfluxDB概念和基本操作
InfluxDB基本概念 数据格式 在 InfluxDB 中,我们可以粗略的将要存入的一条数据看作一个虚拟的 key 和其对应的 value(field value).格式如下: cpu_usage, ...