$O(n^2)$ 多項式$ln$,$exp$,冪函式
阿新 • • 發佈:2021-06-28
\(ln\):
保證\(A_0=1\)
\[B(x)=\ln(A(x)) \]\[B'(x)=\frac{A'(x)}{A(x)} \]\[A(x)B'(x)=A'(x) \]\[nA_n=\sum_{i=1}^niB_iA_{n-i} \]\[B_n=A_n-\frac{1}{n}\sum_{i=1}^{n-1}iB_iA_{n-i} \]\(exp\):
保證\(A_0=0\)
\[B(x)=e^{A(x)} \]\[B'(x)=A'(x)e^{A(x)} \]\[B'(x)=A'(x)B(x) \]\[B_n=\frac{1}{n}\sum_{i=1}^niA_iB_{n-i} \]冪函式:
保證\(F[0]^k\)
inline void polyexp(const int a[],int b[]){//a[0]=1 b[0]=1; fp(i,1,n){ fp(j,1,i)tmod(b[i]+=j*a[j]%mod*b[i-j]); tmod(b[i]*=ginv(i)); } } inline void polyln(const int a[],int b[]){//a[0]=1; b[0]=0; fp(i,1,n){ fp(j,1,i-1)tmod(b[i]-=j*b[j]%mod*a[i-j]); tmod(b[i]=a[i]+ginv(i)*b[i]); } } inline void polypow(const int a[],int b[],int k){//a[0]!=0 b[0]=qpow(a[0],k);int I=ginv(a[0]); fp(i,0,lim-1){ tmod(b[i+1]=k*(i+1)%mod*b[0]%mod*a[i+1]); fp(j,1,i)tmod(b[i+1]+=(k*(i-j+1)-j)%mod*b[j]%mod*a[i-j+1]); tmod(b[i+1]*=inv[i+1]*I%mod); } }