多项式


多项式半家桶

其中 \(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