跟 exp
expex
p 套路是一樣的,套乙個牛頓迭代就出來了。
給出多項式 a(x
)a(x)
a(x)
,求出乙個多項式 g(x
)g(x)
g(x)
滿足 g2(
x)≡a
(x)(
modx
n)
g^2(x)\equiv a(x)\pmod
g2(x)≡
a(x)
(mod
xn)。
設 f (g
(x))
=g2(
x)−a
(x
)f(g(x))=g^2(x)-a(x)
f(g(x)
)=g2
(x)−
a(x)
,那麼就是要求出 f
ff 的零點。
考慮倍增,當 n=1
n=1n=
1 時,這題保證了 a(x
)=
1a(x)=1
a(x)=1
,故 g(x
)=
1g(x)=1
g(x)=1
。假設此時已經求出了 g0(
x)
g_0(x)
g0(x)
,滿足 g02
(x)≡
a(x)
(mod
x⌈n2
⌉)
g_0^2(x)\equiv a(x)\pmod }
g02(x
)≡a(
x)(m
odx⌈
2n⌉
),根據牛頓迭代,有
g (x
)=g0
(x)−
f(g0
(x))
f′(g
0(x)
)=g0
(x)−
f(g0
(x))
2g0(
x)=g
02(x
)+a(
x)2g
0(x)
\begin g(x)&=g_0(x)-\frac \\ &=g_0(x)-\frac \\ &=\frac \\ \end
g(x)=
g0(
x)−f
′(g0
(x)
)f(g
0(x
))=
g0(
x)−2
g0(
x)f(
g0(
x))
=2g0
(x)
g02
(x)+
a(x)
於是就做完了,**如下:
#include
#include
#include
#include
#include
using
namespace std;
#define maxn 600010
#define mod 998244353
#define bin(x) (1<<(x))
int n;
int inv[maxn]
;int
ksm(
int x,
int y)
#define inv(x) ksm(x,mod-2)
struct ntt
}int r[maxn]
,limit;
void
dft(
int*f,
int lg,
int type=0)
for(
int mid=
1,lg=
1;mid1,lg++
)for
(int j=
0;j=(mid<<1)
)for
(int i=
0;i}ntt;
int a[maxn]
,b[maxn]
,c[maxn]
,m;struct poly
poly()
int&
operator
(int x)
friend
const poly operator
*(poly a_,
const
int x)
void
dft(
int*a_,
int lg,
int ln)
void
idft
(int
*a_,
int lg,
int ln)
const poly mul
(poly b,
int ln=m)
}f,g;
void
getinv
(poly &f,poly &g,
int ln=m)
getinv
(f,g,
(ln+1)
>>1)
;int lg=
ceil
(log2(2
*ln-1)
);f.
dft(a,lg,ln)
;g.dft
(b,lg,ln)
;for
(int i=
0;i<
bin(lg)
;i++
)b[i]
=1ll*(
2ll-
1ll*a[i]
*b[i]
%mod+mod)
%mod*b[i]
%mod;g.
idft
(b,lg,ln);}
void
getsqrt
(poly &f,poly &g,
int ln=m)
getsqrt
(f,g,
(ln+1)
>>1)
;poly p=g*
2,pp;
getinv
(p,pp,ln)
;int lg=
ceil
(log2
(ln+ln-1)
);f.
dft(a,lg,ln)
;g.dft
(b,lg,ln)
;pp.
dft(c,lg,ln)
;for
(int i=
0;i<
bin(lg)
;i++
)c[i]
=1ll*(
1ll*b[i]
*b[i]
%mod+a[i]
)%mod*c[i]
%mod;g.
idft
(c,lg,ln);}
intmain()
多項式求逆與多項式開根
閒著沒事幹研究些黑科技 霧 求 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 ...
洛谷5205 模板 多項式開根
點此看題面 大致題意 給定多項式 f x 求 g x 滿足 g x 2 equiv f x mod x n 向 998244353 取模。在知道多項式乘法逆的前提下,這道題的推導其實是非常簡單,甚至要簡單於多項式乘法逆的。但由於多項式開根最後的求解依然需要用到多項式乘法逆,所以總體難度還是高於多項式...
Luogu P5205 模板 多項式開根
給定乙個 n 1 次多項式 a x 求乙個在 bmod x n 意義下的多項式 b x 使得 b 2 x equiv a x bmod x n 多項式的係數在 bmod 998244353 的意義下進行運算。n leq 10 5,a i in 0,998244352 cap mathbb 其實推導過...