眾所周知,生成函式是乙個十分強大的東西,許多與多項式相關的演算法也就應運而生了,在這裡選取幾種較為簡單的演算法做乙個介紹.
p.s. 這篇文章在去年noi前已經完成了一半,現在筆者將其補充完整後發出,同時也為了紀念那一段美好的時光。
已知\(f(x)\),求\(g(x)\)使得\(f(x)g(x)\equiv 1(mod\ x^n)\)
倍增,假設已經求出\(a(x)f(x)\equiv1(mod\ x^\rceil})\)
\(g(x)-a(x)\equiv0(mod\ x^\rceil})\)
注意到這個式子可以平方一下\(g(x)^2-2a(x)g(x)+a(x)^2\equiv0(mod\ x^n)\)
兩邊乘上\(f(x),g(x)-2a(x)+f(x)a(x)^2\equiv0(mod\ x^n)\)
最後得到\(g(x)\equiv a(x)(2-f(x)a(x))(mod\ x^n)\)
咕咕咕假設已知\(n\)次多項式\(f(x)\),求多項式\(g(x)\)使得\(f(g(x))\equiv 0 (\mod x^n)\).
同樣考慮倍增,假設\(f(g_1(x))\equiv 0(\mod x^\rceil})\).
考慮將\(f(g(x))\)在\(g_1(x)\)處taylor展開,有:
\[f(g(x))=f(g_1(x))+\frac(g(x)-g_1(x))+\frac(g(x)}(g(x)-g_1(x))^2+\cdots
\]注意到在\(\mod n\)的意義下,若\(k\geq 2\), 那麼\((g(x)-g_1(x))^k\equiv 0(\mod x^n)\).
於是有\[f(g(x))\equiv f(g_1(x))+f'(g(x))(g(x)-g_1(x))(\mod x^n)
\]移項之後得到:
\[g(x)\equiv g_1(x)-\frac(\mod x^n)
\]已知\(n\)次多項式\(f(x)\),求多項式\(g(x)\)滿足\(g(x)^2\equiv f(x)(\mod x^n)\).
考慮牛頓迭代,構造\(a(g(x))=g(x)^2-f(x).\)顯然最後需要\(a(g(x))\equiv 0(\mod x^n)\).
帶入牛頓迭代的結論中可以得到:
\[g(x)\equiv g_1(x)-\frac=\frac(\mod x^n)
\]對\(f(x)=\sum_^n a_ix^i\)
求導:\(f'(x)=\sum_^na_iix^\)
積分:\(\int f(x)=\sum_^n(\fracx^)+c\)(乙個常數)
復合函式求導:記\(h(x)=f(g(x))\),則\(h'(x)=f'(g(x))g'(x)\)
已知多項式\(f(x)\),求\(g(x)=ln(f(x))\)
對兩邊求導:\(g'(x)=\frac\)
之後再積分回去:\(g(x)=\int \frac\),多項式求逆之後再積分即可。
已知\(n\)次多項式\(f(x)\),求\(g(x)\)滿足\(g(x)\equiv e^(\mod x^n)\).
兩邊同時取\(\ln\)得\(\ln g(x)\equiv f(x)(\mod x^n)\).
令\(a(x)=\ln g(x)-f(x)\), 繼續套用牛頓迭代得到:
\[g(x)\equiv g_1(x)(1-\ln g_1(x)+f(x))(\mod x^n)
\]總**如下:
namespace polynomial
void ntt(int lim,int *a,int typ)
void direv(int *a,int *b,int n)
void inter(int *a,int *b,int n)
void ln(int *a,int *b,int n)
void exp(int *a,int *b,int n)
exp(a,b,(n+1)>>1);
ln(b,d,n);
rep(i,0,n-1)
int lim=calcr(n<<1);
ntt(lim,d,1);ntt(lim,b,1);
rep(i,0,lim-1) b[i]=mul(b[i],d[i]);
ntt(lim,b,-1);
rep(i,n,lim-1) b[i]=0; }
void sqrt(int *a,int *b,int n)
sqrt(a,b,(n+1)>>1);
rep(i,0,(n<<1)-1) b[i]=c[i]=0;
inv(b,b,n);
int lim=calcr(n<<1);
rep(i,0,n-1) c[i]=a[i];
ntt(lim,b,1);ntt(lim,c,1);
rep(i,0,lim-1) b[i]=mul(c[i],b[i]);
ntt(lim,b,-1);
rep(i,0,n-1) b[i]=mul(add(b[i],b[i]),inv2); }}
using namespace polynomial;
多項式全家桶
已知多項式 g x 求 f x 滿足 g f x equiv 0 pmod 假設我們有乙個 f 0 x 滿足 g f 0 x equiv 0 pmod rceil 由定義可知 f x f 0 x equiv 0 pmod rceil rightarrow forall k ge 2,left f x...
多項式全家桶
include include includeusing namespace std const double pi acos 1.0 const int maxn 1e7 5 inline int read int n,m,len,lim 1 int r maxn struct complex c...
多項式全家桶 更新中
多項式全家桶 多項式加法 省略 多項式減法 省略 多項式乘法 多項式取逆 多項式取商 取模 多項式求導 多項式積分 多項式對數 多項式開方 未完成常數項 多項式指數 多項式冪次 未完成常數項為 0 多項式開 k 次方 未完成 多項式三角函式 多項式反三角函式 includeusing namespa...