多项式
多项式半家桶
其中 \(G(x)\) 为 \(\text{mod } x^n\) 下的答案, \(H(x)\) 为 \(\text{mod } x^{\left \lceil \frac{n}{2} \right \rceil}\) 下的答案
多项式乘法逆 \(G(x)\equiv 2H(x)-F(x)H^2(x) (\text{mod } x^n)\)
实现上可以只卷 \(H(x)F(x)\) 然后再处理其他的
多项式开根 \(G(x)\equiv \frac{F(x)+H^2(x)}{2H(x)}\)
用求逆把 \(\frac{F(x)}{H(x)}\) 卷出来,其他的单独算
多项式 \(\ln\) \(G'(x)=\frac{F'(x)}{F(x)}\) 求导再积分回去
求导公式 \(x^{a'}=ax^{a-1}\) 积分公式 \(\int x^adx=\frac{1}{a+1}x^{a+1}\)
多项式 \(\exp\) \(G(x)\equiv H(x)(1-\ln H(x)+F(x))\)
这个就正常写就行
再放个板子,跑得还挺快
Code
#include
#define int long long
#define rint signed
#define mod 998244353
#define i2 499122177
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return x*f;
}
int n;
int f[262150],g[262150],t[262150];
inline int qpow(int x,int k){
int res=1,base=x;
while(k){if(k&1) res=res*base%mod;base=base*base%mod;k>>=1;}
return res;
}
inline void md(int &x){x=(x>=mod)?x-mod:x;}
namespace POLY{
int inv;
int r[262150],g[262150],I[262150];
int T[262150],A[262150],B[262150],C[262150];
inline void init(int len,int L){
for(int i=0;i>1]>>1)|((i&1)<<(L-1));
g[0]=1,g[1]=qpow(3,(mod-1)/len);for(int i=2;i>1;d>=1) for(int i=0;i>1)>1;i>1;i>1)>1);init(len,L);
for(int i=0;i>1;i>1)>1);init(len,L);
for(int i=0;i>1;i>1;i