多項式板子

2021-10-23 02:37:02 字數 1947 閱讀 3880

板子封裝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 ...