多項式乘法逆

2022-02-01 18:53:25 字數 1430 閱讀 1202

多項式乘法

給定乙個 \(n\) 次多項式 \(f(x)\),求 \(g(x)\) 滿足:

\[f(x)\times g(x)\equiv 1\mod x^n

\]

假設有乙個 \(0\) 次多項式 \(f(x)\),易得 \(f(x)\) 為 \(g(x)\) 的逆元, 這給我們提供了乙個分治的思路。

假設已有:

\[g'(x)\equiv f(x)\mod x^ \right \rceil}

\]我們分治的思路是得到兩個區間來合併到乙個區間,我們要保證合併後的區間長度要大於\(n\) 。

則有:\[g(x)-g'(x)\equiv 0\mod x^ \right \rceil}

\]兩邊同時平方:

\[(g(x)-g'(x))^2\equiv 0\mod x^n

\]\[g^2(x)-2g(x)g'(x)+g'^2(x)\equiv 0\mod x^n

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

\[f(x)g^2(x)-2f(x)g(x)g'(x)+f(x)g'^2(x)\equiv 0\mod x^n

\]\[\because f(x)g(x)\equiv 1\mod x^n

\]\[g(x)-2g'(x)+f(x)g'^2(x)\equiv 0\mod x^n

\]\[g(x)\equiv 2g'(x)-f(x)g'^2(x)\mod x^n

\]最後遞迴求解即可

**

#include #include #include #include typedef long long ll;

typedef unsigned long long ull;

using namespace std;

const int maxn = 3e5 + 50, inf = 0x3f3f3f3f, mod = 998244353, inv3 = 332748118;

inline int read ()

inline void write (register int x)

int n, f[maxn], g[maxn], rev[maxn], res[maxn], a[maxn], b[maxn];

inline int qpow (register int a, register int b, register int ans = 1)

inline void ntt (register int len, register int * a, register int opt)

} }}inline void poly_inv (register int d, register int * a, register int * b)

inline void p4238 ()

int main ()

多項式乘法逆

對於多項式f x 求一多項式f x 使得f x f x equiv 1 mod x n 係數對p取模 通常為998244353等原根為2,3的較大的 質數 假設已經求出 mod x rceil 意義下的f x 的逆元f 0 x because f x f 0 x equiv 1 mod x rcei...

任意模數多項式乘法逆

蒟蒻 thesure 剛剛打了任意模數多項式乘法逆的板子 然後 lin4xu 扔來乙個多項式 f x 並 讓 thesure 求出它乘法逆的 x n 項係數對mod取模的結果 lin4xu 知道 thesure 很菜,所以並不想難為 thesure 1.多項式的最高次數不會超過 10 2.f 0 1...

多項式乘法

時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld et reo 吃完了元宵,又開始思考數學問題了。這次他拿了兩個多項式 p mathscrp 和 q mathscrq 他知道這兩個多項式的乘積也是乙個多項式,但他不...