多項式乘法
給定乙個 \(n\) 次多項式 \(f(x)\),求 \(g(x)\) 滿足:假設有乙個 \(0\) 次多項式 \(f(x)\),易得 \(f(x)\) 為 \(g(x)\) 的逆元, 這給我們提供了乙個分治的思路。\[f(x)\times g(x)\equiv 1\mod x^n
\]
假設已有:
\[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 他知道這兩個多項式的乘積也是乙個多項式,但他不...