多項式求逆學習筆記

2022-05-07 23:06:18 字數 1639 閱讀 5747

今天學習了多項式求逆,總結一下。

這裡是網上好的部落格

給定乙個多項式\(a(x)\),求出多項式\(b(x)\),使\(a(x)b(x) \equiv 1 \pmod\)。

考慮遞推求解,假設我們已經求出\(b'(x)\),使

\[a(x)b'(x) \equiv 1 \pmod \rceil}}

\]又:

\[a(x)b(x) \equiv 1 \pmod

\]所以:

\[b(x)-b'(x) \equiv 0 \pmod \rceil}}

\]將式子兩邊平方,有:

\[b(x)^2-2b(x)b'(x)+b'(x)^2 \equiv 0 \pmod

\]這裡說明為何模數變成了\(n\),設\(g(x)=(b(x)-b'(x))^2\),那麼第\(i\)個係數\(a_i = \sum_^ c_j \times c_\),因為原來在\(0\)至\(} \rceil}\)中係數\(c_i\)均為0,所以每一項其中必然有一項\(c_i\)為0。

那麼我們就得到了遞推式:

\[b(x) \equiv 2b'(x)-a(x) b'(x)^2 \pmod

\]fft優化乘法即可。

時間複雜度:

\[t(n)=t(n/2)+o(nlogn),t(n)=o(nlogn)

\]#include#define n 300005

using namespace std;

const int p=998244353,g=3;

int n,lim,l,a[n],b[n],c[n],r[n];

inline int in()

inline int power(int x,int k)

void ntt(int *a,int op) ^ = \frac= \frac^} }}$。

然後求出下面多項式的逆就可以得到伯努利數了。

例2.bzoj3456 城市規劃(許可權題)

題意:給定$n$,求出$n$個頂點的簡單無向連通圖的個數。

解析:設$f(n)$表示$n$個頂點的簡單無向連通圖的個數,$g(n)$表示$n$個頂點的簡單無向圖的個數,那麼顯然有:

$$g(n)=2^\qquad(1)\]

考慮\(g(n)\)的另一種計算方法,列舉1號點所在連通塊的頂點個數,那麼有:

\[g(n)=\sum_^ c(n-1,i-1)\times f(i) \times g(n-i) \qquad (2)

\]將(1)代入(2),有:

\[2^=\sum_^ c(n-1,i-1)\times f(i) \times 2^

\]兩邊同時除以\((n-1)!\),有:

\[\frac}=\sum_^ \frac}}

\]定義:\(p(x)=\sum_^ \frac x^n\),\(q(x)=\sum_^ \frac} x^n\),\(g(x)=\sum_^ \frac} x^n\)。

那麼據上有:

\[g(x)=p(x)q(x)

\]因為是求\(p(x)\)的第\(n-1\)項係數,考慮這個等式在模\(x^n\)下的意義:

\[g(x) \equiv p(x)q(x) \pmod

\]那麼有:

\[p(x) \equiv g(x)^q(x) \pmod

\]多項式求逆即可。

多項式求逆

你可能覺得這篇部落格很像網上的另一篇,我會告訴你我是抄的無可奉告 w 首先我們來講一些基礎的定義 多項式的度 就是這個多項式的最高次項的次數,記做deg a 對於多項式a x b x 唯一存在多項式q x r x 滿足a x b x q x r x 並且deg r deg b 那麼我們稱q x 為a...

多項式求逆

問題 求多項式 g x 滿足 f x g x equiv 1 pmod q1 這是什麼意思?a1 即 f x g x 最後只有常數項係數為 1 其餘係數都為 0 q2 為什麼要求模 x n a2 這是為了將 n 次方以上的項全都除去,否則 g x 會有無窮多項。用倍增的方法可以 o n log n ...

多項式求逆

給定乙個多項式 f x 請求出乙個多項式 g x 滿足 f x times g x equiv 1 mathrmx n 假設我們已經求得了 g 0 x 滿足 f x times g 0 x equiv 1 mathrmx frac 現在求 f x times g x equiv 1 mathrmx ...