板子封裝8太行,湊合著用吧(
可能以後會把推導補上吧(咕咕咕)
求逆:
ll a[mn]
,b[mn]
,r[mn]
;void
init
(int n)
void
inv(
int*f,
int*g,
int n)
int mid=
(n+1
)>>1;
inv(f,g,mid)
;int len=1;
while
(len<=n*
2)len<<=1;
init
(len)
;for
(int i=
0;i++i)
for(
int i=
0;i++i)b[i]
=g[i]
;for
(int i=mid;i++i)b[i]=0
;for
(int i=n;i++i)a[i]=0
;ntt
(a,len,1)
;ntt
(b,len,1)
;for
(int i=
0;i++i)a[i]
=a[i]
*b[i]
%mod*b[i]
%mod;
ntt(a,len,0)
;for
(int i=
0;i++i)g[i]
=(g[i]*2
-a[i]
+mod)
%mod;
}
ln:
ll a[mn]
,b[mn]
,a[mn]
,b[mn]
,r[mn]
,c[mn]
;void
dao(
int*a,
int*b,
int n)
void
jifen
(int
*a,int
*b,int n)
intinit
(int len)
voidln(
int*a,
int*b,
int n)
exp(分治ntt,好寫常數小):
namespace exp
int mid=
(l+r)
>>1;
work
(l,mid,f,g)
;int len=1;
while
(len<=r-l)len<<=1;
for(
int i=
0;i++i)
pre(len)
;for
(int i=l;i++i)a[i-l]
=g[i]
;for
(int i=
0;i++i)b[i]
=f[i]
;ntt
(a,len,1)
;ntt
(b,len,1)
;for
(int i=
0;i++i)a[i]
=a[i]
*b[i]
%mod;
ntt(a,len,0)
;for
(int i=mid;i++i)
g[i]
=addupd
(g[i]
+a[i-l-1]
);work
(mid,r,f,g);}
void
solve
(int
*f,int
*g,int n)
}
好像寫namespace比較好,除了空間開銷大其他沒啥 多項式板子 新
upd於2.19 拉格朗日反演 多項式倍增快速冪 好像是還差乙個多項式取模.算了不寫了 注意本板子使用過程中 每個函式傳的len一定要保證是2的倍數,並且傳遞的陣列需要保證他有多於2 len的空間 每個函式傳進來的指標保證 0,len 有值,len,2 len 有定義 注意new出來的記憶體一定要清...
模板 多項式乘法(FFT) FFT板子
輸入n,m 1e6 n,m 1e6 n,m 1e 6 輸入n 1 n 1n 1個數字表示從低到高f x f x f x 的係數輸入m 1 m 1m 1個數表示從低到高g x g x g x 的係數輸出 一行n m 1 n m 1 n m 1個數表示f x g x f x g x f x g x 從低...
我的多項式全家桶板子
博主最近心血來潮,貼貼全家桶。本多項式全家桶包含了 多項式乘法,多項式求逆,多項式求ln,多項式求exp,多項式除法,多項式取模,多項式多點求值,以及乙個為了多點求值用的分治ntt。由於時代變了,博主的多點求值使用了常數較小的版本。include define i inline define fi ...