笔记-多项式相关操作

多项式求导

函数(f(x))的导函数(f^{'}(x))有如下性质:

((f(x)pm g(x))^{'}=f^{'}(x)pm g^{'}(x))

((f(x)g(x))^{'}=f^{'}(x)g(x)+f(x)g^{'}(x))

而且对于单项式(f(x)=x^n),其导数(f^{'}(x)=nx^{n-1}),所以其(k(kleq n))阶导数(f^{(k)}(x)=frac{n!}{(n-k)!}x^{n-k})

相应的,对于多项式(f(x)=sum_{i=0}^na_ix^i),其导数(f(x)=sum_{i=0}^{n-1}a_{i+1}(i+1)x^i),其(k(kleq n))阶导数(f^{(k)}=sum_{i=0}^{n-k}a_{i+k}frac {(i+k)!}{i!}x^i)

(T(n)=O(n))

多项式积分

在一定程度上,积分是求导的逆运算

(f(x)=sum_{i=0}^{n-1}a_ix_i)

(int f^{'}(x)cdot dx=sum_{i=1}^{n}frac {a_{i-1}}{i}x^i)

(T(n)=O(n))

注意同一多项式求导需要逆序

多项式翻转

NOIP考点,但有个式子可以留意:(f^{R}(x)=x^nf(frac 1x))

多项式求逆

单个元素的逆元应该是是会求的,比如说一个数(t)的逆元在膜质数意义下为(t^{p-2})

但现在要求求一个多项式的逆元,联想到在模数为(x)时可以快速求得其逆元为(a(0)^{-1}),可以考虑从这里开始递推

对于题目可设
(a*bequiv 1pmod {x^{2p}}\a*cequiv 1pmod {x^p})

即已知(a,c)(b)

(a*bequiv 1pmod {x^p}\a*cequiv 1pmod {x^p})

(Rightarrow b-cequiv 0pmod {x^p})

(Rightarrow b^2-2bc+c^2equiv 0 pmod {x^{2p}})

同乘(a)

(Leftrightarrow ab^2-2abc+ac^2equiv 0 pmod {x^{2p}})

考虑到(abequiv 1pmod {x^{2p}})

(Leftrightarrow b-2c+ac^2equiv 0 pmod {x^{2p}})
(Leftrightarrow bequiv 2c-ac^2 pmod {x^{2p}})

(T(n)=O(nlog_2 n))

牛顿迭代法

可以用来比较高效地求解多项式函数(f(x)=sum_{i=0}^na_ix^i)零点的近似解,大致过程是,选取(x_0)作为零点的近似值(当然这个近似值很可能差距很大,但经过若干次牛顿迭代后将会接近零点),然后求过点((x_o,f(x_0)))关于(f(x))的切线(l),然后得到直线(l)的零点(x_1)作为新的近似值,如此反复,得到的(x_i)会收敛

求解使得(F(f(x))=0pmod {x^n})的多项式(f(x))

可以用类似多项式求逆的方法,从(mod x^1)的情况下开始推导至(mod x^n)的情况,(mod x^1)的情况可以直接求得,设当前(F(f_0(x))equiv 0pmod {x^{lceil frac k2 ceil}}),现在要求解(F(f(x))equiv 0pmod {x^k}),在(f_0(x))处展开(F(f(x)))

[F(f(x))=F(f_0(x))+sum_{i=1}^{+infty} F^{(i)}(f_0(x))(f(x)-f_0(x))^i ]

由于(f(x))(f_0(x))中前(lceil frac k2 ceil)项是相同的,所以多项式((f(x)-f_0(x))^t)(tgeq 2)时在(mod x^k)情况下为(0),所以

[F(f(x))=F(f_0(x))+F^{'}(f_0(x))(f(x)-f_0(x)) ]

由于(F(f(x))equiv 0pmod {x^k}),所以可推得

[f(x)=f_0(x)-frac{F(f_0(x))}{F^{'}(f_0(x))} ]

这个式子貌似很有用

多项式开根

已知(g(x)),求解(f(x)^2equiv g(x)pmod {x^n})

(f(x)^2-g(x)equiv 0pmod {x^n})

则有(F(f(x))equiv f_0(x)^2-g(x)pmod {x^n}\F^{'}(f(x))equiv 2f_0(x)pmod {x^n})

由上述牛顿迭代得到的式子可知

(f(x)equiv f_0(x)-frac{F(f_0(x))}{F^{'}(f_0(x))}pmod {x^n})

(f(x)equiv f_0(x)-frac {f_0(x)^2-g(x)}{2f_0(x)}pmod {x^n})

(f(x)equiv frac {f_0(x)^2+g(x)}{2f_0(x)}pmod {x^n})

(T(n)=O(nlog_2n))

另外常数项如果非1则需要求二次剩余,然而我并不会

多项式求ln

已知(f(x)),求解(ln(f(x)))

((ln f(x))^{'}=frac {d ln f(x)}{d~f(x)}cdot frac{d~f(x)}{dx}=(ln f(x))^{'}cdot f^{'}(x)=frac{f^{'}(x)}{f(x)})

所以

(ln f(x)=large int small(ln f(x))^{'}=large int small frac {f^{'}(x)}{f(x)})

(T(n)=O(nlog_2n))

多项式求exp

已知(g(x)),求解(f(x)=e^{g(x)})

(F(f(x))=ln f(x)-g(x)equiv 0pmod {x^n})

则有(F^{'}(f(x))equiv frac 1{f(x)})

由上述牛顿迭代得到的式子可知

(f(x)equiv f_0(x)-frac{F(f_0(x))}{F^{'}(f_0(x))}pmod {x^n})

(f(x)equiv f_0(x)-frac {ln f_0(x)-g(x)}{frac 1{f_0(x)}}pmod {x^n})

(f(x)equiv f_0(x)(1-ln f_0(x)+g(x))pmod {x^n})

(T(n)=O(nlog_2n))

多项式求k次方

暴力(O(nlog_2nlog_2k))

但数学就是那么神奇,转个弯可以加速

(f(x)^k=(e^{ln f(x)})^k=e^{kcdot ln f(x)})

(T(n)=O(nlog_2n))

多项式除法&取模

已知(n)次多项式(A(x))(m)次多项式(B(x)),求解(n-m)次多项式(f(x))(k(k<m))次多项式(g(x)),使得(A(x)=f(x)B(x)+g(x))

消除(g(x))的影响,将(f(x))翻转

(x^nA(frac 1x)=x^nf(frac 1x)B(frac 1x)+x^ng(frac 1x))

(Leftrightarrow x^nA(frac 1x)=x^{n-m}f(frac 1x)x^mB(frac 1x)+x^{n-m+1}x^{m-1}g(frac 1x))

(Leftrightarrow A^R(x)=f^R(x)B^R(x)+x^{n-m+1}g^R(x))

这个式子在模(x^{n-m+1})的情况下,关于(g^R(x))的项恒为零,同时(deg~f^R(x)<n-m+1)不受影响,就可以得到(f^R(x))的真实值(f^R(x)=frac {A^R(x)}{B^R(x)}mod {x^{n-m+1}}),对(f^R(x))翻转可得(f(x)),同时计算出(g(x)=A(x)-f(x)B(x))

原文地址:https://www.cnblogs.com/penth/p/9470258.html