多項式全家桶

2022-03-30 07:29:54 字數 2529 閱讀 2378

眾所周知,生成函式是乙個十分強大的東西,許多與多項式相關的演算法也就應運而生了,在這裡選取幾種較為簡單的演算法做乙個介紹.

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...