洛谷P4238 模板 多項式乘法逆

2022-06-13 14:30:13 字數 883 閱讀 9863

給定乙個多項式 \(f(x)\) ,請求出乙個多項式 \(g(x)\), 滿足 \(f(x) * g(x) \equiv 1 ( \mathrm x^n )\)。係數對 \(998244353\) 取模。

\(n\leq 10^5\)。

假設我們已經知道了 \(f(x)g'(x)\equiv 1\pmod }}\),考慮如何推廣到 \(f(x)g(x)\equiv 1\pmod \)

首先顯然有

\[g(x)-g'(x)\equiv 0\pmod}}

\]兩邊平方後拆開

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

\]同時乘上 \(f(x)\)

\[g(x)-2g'(x)+g'(x)^2f(x)\equiv 0\pmod}

\]所以

\[g(x)\equiv 2g'(x)-g'(x)^2f(x)\pmod}

\]然後就可以遞推了。

\(t(n)=t(\frac)+o(n\log n)\),故時間複雜度為 \(o(n\log n)\)。

#include using namespace std;

typedef long long ll;

const int n=300010,mod=998244353,g=3,ginv=332748118;

int n,rev[n];

ll f[n],g[2][n],h[n],x[n],y[n];

ll fpow(ll x,ll k)

void ntt(ll *f,int tag,int lim)

for (int i=0;iprintf("%lld ",g[id][i]);

}int main()

洛谷P4238 模板 多項式求逆

題目傳送門 題目分析 放個板子在blog上,以後複習的時候用。注意每一次呼叫poly rev 的時候都要重新計算一遍rev陣列,而且要先清0。求modxm modx m下的逆元的時候,注意ntt的次數界要開到2m,因為a x g2 x a x g2 x 的次數界加起來為m m2 m 2 2 2m 2...

luoguP4238 模板 多項式求逆

令 b x 表示 a x 在 x 下的逆 那麼有 b x 2b x ab x 遞迴一下即可 在 len 1 時直接對常數項求逆即可 這裡一定要注意!取逆的時候是預設 x 的,所以如果在多項式後面多加幾個 0 的話逆是會變的!因為模數改變了!code include include include i...

Luogu 4238 模板 多項式求逆

瘋狂補板中。考慮倍增實現。假設多項式只有乙個常數項,直接對它逆元就可以了。現在假如要求 g x f x g x equiv 1 mod x n 而我們已經求出了 h x f x h x equiv 1 mod x right rceil 兩式相減,f x g x h x equiv 0 mod x ...