码迷,mamicode.com
首页 > 其他好文 > 详细

多项式求逆,除法,开方,任意模数FFT

时间:2018-03-25 10:32:38      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:直接   lin   fft   运算   class   AC   就是   inline   求逆   

多项式求逆

给定\(A(x)\)求满足\(A(x)*B(x)=1\)\(B(x)\)

写成
\[A(x)*B(x)=1(mod \ x^n)\]

我们会求\[A(x)*B(x)=1(mod \ x^1)\]

然后我们考虑求\[A(x)*B(x)=1(mod \ x^t)\]

\[(A(x)*B(x)-1)^2=(mod \ x^{2t})\]

\[A(x)(2B(x)-A(x)*B^2(x))=1(mod \ x^{2t})\]

\(2B(x)-A(x)*B^2(x)\)当作新的\(B\)倍增算

\(mod \ x^1\)倍增到大于等于\(n\)

多项式除法

已知\(n\)次多项式\(A(x)\)\(m\)次多项式\(B(x)\)\(n>m\)
\(A(x)\)除以\(B(x)\)的商\(C(x)\)及余式\(D(x)\)

也就是
\[A(x)=B(x)C(x)+D(x)\]
\[A(\frac{1}{x})=B(\frac{1}{x})C(\frac{1}{x})+D(\frac{1}{x})\]
\[x^nA(\frac{1}{x})=(x^mB(\frac{1}{x}))(x^{n-m}C(\frac{1}{x}))+x^{n-m+1}(x^{n-1}D(\frac{1}{x}))\]
\(x^{n-m+1}\)取模
\[A^R(x)=B^R(x)C^R(x)(mod \ x^{n-m+1})\]
\(R\)表示把系数倒置,即\(swap\)前后
那么可以多项式求逆,再相乘得到\(C^R(x)\)
然后去掉\(R\)带入原式相乘再相减得到\(D(x)\)

多项式开方

给定\(B(x)\),求\(A(x)\)使\(A^2(x)=B(x)\)
写成
\[A^2(x)=B(x) (mod \ x^n)\]

然后
\[A^2(x)=B(x)(mod \ x^1)\]
是可以求的,好像是什么二次剩余
留坑在这里以后补

考虑求
\[A^2(x)=B(x)(mod \ x^{2t})\]


\[C^2(x)=B(x)(mod \ x^t)\]

那么

\[(A^2(x)-C^2(x))^2=0(mod \ x^{2t})\]

\[A^4(x)-2A^2(x)C^2(x)+C^$(x)=0(mod \ x^{2t})\]

\[A^2(x)=\frac{A^4(x)+C^4(x)}{2C^2(x)}(mod \ x^{2t})\]

\[2A^2(x)=\frac{A^4(x)+2C^2(x)A^2(x)+C^4(x)}{2C^2(x)}(mod \ x^{2t})\]

\[A^2(x)=\frac{(A^2(x)+C^2(x))^2}{(2C(x))^2}(mod \ x^{2t})\]

\[A(x)=\frac{B(x)+C^2(x)}{2C(x)}(mod \ x^{2t})\]

同样的还是倍增求

任意模数FFT

由于\(NTT\)只能做对\(2^x+1\)这样的质数取模的多项式乘法
对于任意模数,可以这样来做

\(m=\sqrt {mod}\)
把多项式\(A(x)\)\(B(x)\)的系数都拆成\(a*m+b\)的形式,时\(a, b\)都小于\(m\)
提出,那么一个多项式就可以拆成两个多项式的加法
一个是\(a*m\)的,一个是\(b\)
直接乘法分配律,\(aa\)一遍,\(ab\)一遍,\(ba\)\(bb\)一遍,四遍\(FFT\)
乘出来不会超过取模范围
然后合并就和
\[(a*m+b)(c*m+d)=a*c*m^2+(a*c+b*d)m+bd\]
一样
\(FFT\)实数运算,算\(w^k\)是直接可以用三角函数算,直接乘可能有精度问题

多项式求逆,除法,开方,任意模数FFT

标签:直接   lin   fft   运算   class   AC   就是   inline   求逆   

原文地址:https://www.cnblogs.com/cjoieryl/p/8641868.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!