多項式求逆與多項式開根

2021-08-15 15:19:51 字數 1155 閱讀 2816

閒著沒事幹研究些黑科技(霧)

求 a(x)*b(x)==1(mod x^n)

其中n為a(x),b(x)的度的較大值

已知a(x)求b(x),b(x)=a(x)^(-1)(mod x^n)

假設n=1,則b(x)=a(x)常數項在mod p 意義下的的逆元

假設n>1

已知 a(x)*b』(x)==1(mod x^(n/2))

a(x)*b(x)==1(mod x^n) ==> a(x)*b(x)==1(mod x^(n/2))

兩式相減

a(x)*(b(x)-b』(x))==0(mod x^(n/2))

a(x)顯然不全0,否則無解

同除掉a(x):b(x)-b』(x)==0(mod x^(n/2))

兩邊同時平方

b(x)^2-2*b(x)*b』(x)+b』(x)^2==0(mod x^n)

兩邊同乘a(x)

a(x)*b(x)==0(mod n)

所以可化為:b(x)-2*b』(x)+b』(x)^2*a(x)==0(mod x^n)

b(x)=2*b』(x)-b』(x)^2*a(x)(mod x^n)

直接上ntt就好了

從n=1一直往回推,時間複雜度o(n(logn)^2)

求 b(x)*b(x)==a(x)(mod x^n)

如果n==1,直接把a(x)中的常數項搞個二次剩餘

對於n>1

考慮 b』(x)^2==a(x)(mod x^(n/2))

同樣的思路,把第乙個式子變成 b(x)^2==a(x)(mod x^(n/2))

兩式相減 (b(x)+b』(x))*(b(x)-b』(x))==0(mod x^(n/2))

可以得到b(x)有兩個解,考慮b(x)=b』(x)(mod意義下)

b(x)-b』(x)==0(mod x^(n/2))

兩邊平方 b(x)^2-2*b(x)*b』(x)+b』(x)^2==0(mod x^n)

將b(x)^2==a(x)(mod x^n)代入

a(x)-2*b(x)*b』(x)+b』(x)^2==0(mod x^n)

b(x)=a(x)+b』(x)^2 / 2*b』(x) (mod x^n)

套多項式求逆和ntt就好了

數學 多項式 多項式求逆

多項式求逆 前置知識 ntt 給定乙個多項式 f left x right 求乙個多項式 g left x right 使得 f left x right g left x right equiv 1 left bmod 998244353 right 考慮遞迴求解。假定現在已經求出了 g 0 le...

FFT模板 生成函式 原根 多項式求逆 多項式開根

fft 1 include2 include3 include4 include5 include6 include7 define maxn 1000005 8using namespace std 9 inline int read 15double pi acos 1.0 16 struct ...

多項式求逆

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