多項式求逆

2022-05-07 20:00:20 字數 1647 閱讀 2910

問題:

求多項式\(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)\)求出。

假設我們求出了\(h(x)\),滿足\(f(x)*h(x)\equiv 1\pmod\rceil}}\)。

我們要求\(g(x)\),滿足\(f(x)*g(x)\equiv 1\pmod\)。

進行推導:

\(f(x)*h(x)\equiv 1\pmod\rceil}}\)

\(f(x)*g(x)\equiv 1\pmod\)

\(f(x)*g(x)\equiv f(x)*h(x)\pmod\rceil}}\)(為什麼正確需要考慮模的意義:忽略更高次項)

\(f(x)*(g(x)-h(x))\equiv 0\pmod\rceil}}\)

\(g(x)-h(x)\equiv 0\pmod\rceil}}\)

\((g(x)-h(x))^2\equiv 0\pmod\rceil}}\)

\(g(x)^2-2*g(x)*h(x)+h(x)^2\equiv 0\pmod\rceil}}\)

此時有個結論:

\(g(x)^2-2*g(x)*h(x)+h(x)^2\equiv 0\pmod\)

因為平方前\((g(x)-h(x))\)中\([0,\lceil\frac\rceil-1]\)的係數都為\(0\),考慮\(i\in[\lceil\frac\rceil,n-1]\),\(c_i=\sum\limits_a_j*b_\),其中\(j,i-j\)中必定有乙個屬於\([0,\lceil\frac\rceil-1]\),因此\(c_i=0\)。

兩邊同乘\(f(x)\):

\(g(x)-2*h(x)+f(x)h(x)^2\equiv 0\pmod\)

\(g(x)\equiv2*h(x)-f(x)*h(x)^2\pmod\)

\(g(x)\equiv h(x)*(2-f(x)*h(x))\pmod\)

於是可以遞迴分治求了。

code:

#includeusing namespace std;

typedef long long ll;

const int maxn=4*1e5+10;

const ll mod=998244353;

const ll g=3;

const ll invg=332748118;

int n,lim,len;

int pos[maxn];

ll a[maxn],b[maxn],c[maxn];

inline ll read()

while(c>='0'&&c<='9')res=res*10+c-'0',c=getchar();

return res*f;

}inline ll power(ll x,ll k)

return res;

}void ntt(ll* a,int op)

int main()

多項式求逆

你可能覺得這篇部落格很像網上的另一篇,我會告訴你我是抄的無可奉告 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...

多項式求逆

給定乙個多項式 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 ...

多項式求逆

多項式求逆指的是給定乙個多項式 f x 求出乙個多項式 g x 滿足 f x g x equiv1 pmod 我們稱乙個多項式的 度 為其最高次項係數 1 首先,我們知道當 n 1 的時候,顯然 g x 即為 f x 的常數項之逆元 我們將原式寫成模 x 意義下的形式 f x g x equiv1 ...