1. 程式人生 > 其它 >$O(n^2)$ 多項式$ln$,$exp$,冪函式

$O(n^2)$ 多項式$ln$,$exp$,冪函式

\(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\)

存在且\(F[0]\)有逆元(一定情況下可以處理\(k\)為小數)

\[(F^k(x))'F(x)=kF^k(x)F'(x) \]\[\sum_{i=0}^n(i+1)F^k[i+1]F[n-i]=k(n-i+1)\sum_{i=0}^nF^k[i]F[n-i+1] \]\[F^k[n+1]=\dfrac{k(n+1)F^k[0]F[n+1]+\sum_{i=1}^n (k(n-i+1)-i)F^k[i]F[n-i+1]}{(n+1)F[0]} \]
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);
    }
}