首页 > 其他分享 >多项式笔记

多项式笔记

时间:2022-12-27 23:01:07浏览次数:33  
标签:frac int 多项式 ll 笔记 alpha mod equiv

多项式,清空,封装,边界,是讨厌的。

NTT

懒得讲原理,喵。

	ll A[maxn],B[maxn],pos[maxn],S[maxn];
	const int mod=998244353,g=3,ginv=332748118;
	ll ksm(ll x,int y)
	{
		ll ret=1;
		while(y)
		{
			if(y&1) ret=ret*x%mod; 
			x=x*x%mod; y>>=1;
		}
		return ret;
	}
	int pre(int n,int m)
	{
		int lim=0;
		while((1<<lim)<=n+m) lim++;
		for(int i=0;i<=(1<<lim);i++)
				pos[i]=(pos[i>>1]>>1)|((i&1)<<(lim-1));
		return lim;
	}
	void NTT(ll *f,ll n,int opt)
	{
		for(int i=0;i<n;i++) if(i<pos[i]) swap(f[i],f[pos[i]]);
		for(int i=1;i<n;i<<=1)
		{
			ll step=ksm((opt>0?g:ginv),(mod-1)/(2*i));
			for(int j=0;j<n;j+=i+i)
			{
				ll cur=1;
				for(int k=j;k<j+i;k++)
				{
					int gx=f[k],hx=1ll*cur*f[k+i]%mod;
					f[k]=(gx+hx)%mod;f[k+i]=(gx-hx+mod)%mod;
					cur=cur*step%mod;
				}
			}
		}
		if(opt==-1)
		{
			int ninv=ksm(n,mod-2);
			for(int i=0;i<n;i++) f[i]=f[i]*ninv%mod;
		}
	}
	void MUL(ll *s,ll *f,ll *h,int n,int m)
	{
		int lim=pre(n,m);
		for(int i=0;i<=n;i++) A[i]=f[i];
		for(int i=0;i<=m;i++) B[i]=h[i];
		for(int i=n+1;i<=(1<<lim);i++) A[i]=0;
		for(int i=m+1;i<=(1<<lim);i++) B[i]=0;
		NTT(A,(1<<lim),1);NTT(B,(1<<lim),1);
		for(int i=0;i<=(1<<lim)-1;i++) s[i]=A[i]*B[i]%mod;
		NTT(s,(1<<lim),-1);
	}

多项式求逆

给出\(F(x)\),求出 \(G(x)\) 使得 \(G(x) F(x)\equiv 1 (\mod x^n)\)

令 \(F(x)H(x)\equiv 1(\mod x^{\frac n 2})\)

\(F(x)(G(X)-H(x))\equiv 0(\mod x^{\frac n 2})\)

\(G(x)-H(x)\equiv 0(\mod x^{\frac n 2})\)

\((G(x)-H(x))^2\equiv 0(\mod x^{n})\)

\(G^2(x)-2G(x)H(x)+H^2(x)\equiv 0(\mod x^n)\)

两边同时乘个 \(F(x)\)

\(G(x)-2H(x)+F(x)H^2(x)\equiv 0(\mod x^n)\)

\(G(x)=2H(x)-F(x)H^2(x)\)

然后已知 \(H(x)\) 就能做了。递归下去就行了。。

一般都写成非递归。

	void INV(ll *s,ll *f,int n)
	{
		S[0]=ksm(f[0],mod-2);S[1]=0;
		for(int len=2;len<=(n<<1);len<<=1)
		{
			ll lim=(len<<1);
			for(int i=0;i<len;i++) A[i]=f[i],B[i]=S[i];
			for(int i=len;i<lim;i++) A[i]=B[i]=0;
			pre(len,0);
			NTT(A,lim,1); NTT(B,lim,1);
			for(int j=0;j<lim;j++)
				S[j]=(2*B[j]%mod+mod-A[j]*B[j]%mod*B[j]%mod)%mod;
			NTT(S,lim,-1);
			for(int j=len;j<lim;j++) S[j]=0;
		}
		for(int i=0;i<=n;i++) s[i]=S[i];
	}

多项式对数函数(ln)

设 \(G(x)=\ln(F(X))\)

同时求导

\(G'(x)=\ln '(F(x))\)

然后复合函数求导拆开

\(G'(x)=\frac{F'(x)}{F(x)}\)

然后先求导,再求逆,最后积分一下就行。

求导:\((x^\alpha)' = \alpha x^{\alpha -1}\)

积分:\(\int \alpha x^{\alpha-1}=x^{\alpha}\)

\(\int x^\alpha=\frac 1 {\alpha+1} x^{\alpha+1}\)


留个坑(((

标签:frac,int,多项式,ll,笔记,alpha,mod,equiv
From: https://www.cnblogs.com/cc0000/p/17009204.html

相关文章

  • 前后端笔记
    客户端--用户的角度,client服务器端--server实现三个模块。后端backend。使用springboot实现。对接mysql,redis,硬盘,微服务前端web。前端acapp。客户端发出请求ur......
  • Java学习笔记------线程安全问题
    线程的安全问题同步机制解决线程安全问题方式一:同步代码块synchronized(obj){ //需要被同步的代码}synchronized(this){}synchronized(Windows.class){}......
  • Java学习笔记----线程基础
    线程线程,进程可进一步细化为线程,是一个程序内部的一条执行路径线程作为调度和执行的单位,每个线程拥有独立的运行栈和程序计数器,线程切换的开销小线程的创建与启动Java......
  • 《高质量读研》读书摘录及笔记
    本博客将简单摘录并总结复旦大学张军平老师的书籍《高质量读研》中的内容,虽然读研究生这件事对每个人的最优解都是不同的,但也希望通过读这本书听听过来人的意见.下......
  • 学习js的一些笔记
     1,对变量的一些认识在学习java的过程中,我对变量的理解,其实就是一个在运行期进行简单储存的数据的内存空间,运行期结束后就会在各个代码的垃圾回收机制中在内存空间中消除......
  • Docker粗截图笔记
            下载包docker.com                用户组,相对地址          搜索nigix镜......
  • Python学习笔记--PySpark的基础学习(二)
    filter方法(过滤想要的数据进行保留)具体实现(保留奇数):具体实现(保留偶数):distinct方法(对RDD进行去重,返回新的RDD)且无需传参具体实现(去重):sortBy方法(排序,基于我们制定的......
  • WWDC 2013 Session笔记 - iOS7中的ViewController切换
    这是我的WWDC2013系列笔记中的一篇,完整的笔记列表请参看​​这篇总览​​​。本文仅作为个人记录使用,也欢迎在​​许可协议​​​范围内转载或使用,但是还烦请保留原文链接,谢......
  • iOS学习笔记45—本地通知UILocalNotification
    在iOS中有两类信息提示推送方式,一类是远程服务器推送(APNS),之前有笔记9​​,还有一类就是本地通知UILocalNotification,今天就简要的记录一下UILocalNotification的使用,代码里见......
  • 郝斌老师数据结构课程笔记
    说明1.建议用notepad++、或UE打开,文件以.c的形式提供,就是是为了高亮显示,才会有论坛图片上的效果,如果用记事本观看会有点乱,如果记事本采用自动换行会更乱。2.本人没什么技术,......