生成函数
柒葉灬
2019-10-08 15:33:57
# 生成函数
----
广义二项式定理公式:
$$\displaystyle (a+b)^α=\sum_{k=0}^{\infty} \frac{α(α-1) \dots (α-k+1)}{k!} x^{α-k}y^{k} $$
### 多项式求逆
求$A(x)B(x) \equiv 1 (mod \ x^n)$
只要记住$ B(x)=2B'(x)-A(x)B'^2(x)$ 就行了
$A(x)B'(x) \equiv 1 (mod \ \frac{n}{2})$
主要递归代码:
```cpp
long long tmp[maxn];
void solve(int n){
if(n==1){
B[0]=qpow(A[0],P-2);
return;
}
solve(n>>1);
calc(tmp,B,B,(n>>1)-1);
calc(tmp,tmp,A,n-1);
for(int i=0;i<n;i++){
B[i]=(2*B[i]-tmp[i]+P)%P;
}
}
```
--------
### 多项式开根
求$B^2(x) \equiv A(x) (mod \ x^n)$
只要记住$ B(x)={A(x)+B'^2(x) \over 2B'(x)}=\frac{A(x)}{2B'(x)}+\frac{B'(x)}{2}=\frac{1}{2}(\frac{A(x)}{B'(x)}+B'(x))$ 就行了
$B'^2(x) \equiv A(x) (mod \ \frac{n}{2})$
一定要注意:逆元必须开到当前区间长度,并且逆元每次处理前需要清零