ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

一种快速的常系数齐次线性递推算法

2021-12-09 07:00:06  阅读:170  来源: 互联网

标签:int wn inv len 算法 齐次 pdf 递推 mo


论文参考
https://arxiv.org/pdf/2008.08822.pdf

int t[N],p[N],q[N],dp[N],dq[N],ddp[N],ddq[N]; 
int coefficient(int n,int len)
{
	int v=inv(2),wn=ksm(h,(mo-1)/(2*len)),wm=inv(wn); 
	
	for(int i=0;i<len;i++)dp[i]=p[i],dq[i]=q[i];
	ntt(dp,len,+1);ntt(dq,len,+1);
	while(n) 
	{
		//ddp ddq
		for(int i=0;i<len;i++)ddp[2*i]=dp[i],ddq[2*i]=dq[i];
		for(int i=0,w=1;i<len;i++,w=1ll*w*wn%mo)p[i]=1ll*p[i]*w%mo,q[i]=1ll*q[i]*w%mo;
		ntt(p,len,+1);ntt(q,len,+1);
		for(int i=0;i<len;i++)ddp[2*i+1]=p[i],ddq[2*i+1]=q[i];
		//p dp
		for(int i=0;i<2*len;i++)t[i]=1ll*ddp[i]*ddq[i^len]%mo;
		if(n&1)for(int i=0,w=1;i<2*len;i++,w=1ll*w*wm%mo)t[i]=1ll*t[i]*w%mo;
		for(int i=0;i<len;i++)t[i]=1ll*v*inc(t[i],t[i+len])%mo,dp[i]=t[i];
		ntt(t,len,-1);for(int i=0;i<len;i++)p[i]=t[i];	
		//q dq
		for(int i=0;i<2*len;i++)t[i]=1ll*ddq[i]*ddq[i^len]%mo;
		for(int i=0;i<len;i++)t[i]=1ll*v*inc(t[i],t[i+len])%mo,dq[i]=t[i];
		ntt(t,len,-1);for(int i=0;i<len;i++)q[i]=t[i];
		
		n>>=1; 
	}
	return 1ll*p[0]*inv(q[0])%mo;
}
int recurrence(int *f,int *g,int n,int k)
{
	int len=1;
	while(len<(n+1))len<<=1;
	for(int i=0;i<len;i++)p[i]=q[i]=0; 
	q[0]=1;for(int i=1;i<=n;i++)q[i]=dec(0,g[i]);
	
	for(int i=0;i<n;i++)a[i]=f[i];
	b[0]=0;for(int i=1;i<=n;i++)b[i]=g[i];
	poly_mul(len,len); 
	for(int i=0;i<n;i++)p[i]=dec(f[i],a[i]);
	
	return coefficient(k,len);
}

标签:int,wn,inv,len,算法,齐次,pdf,递推,mo
来源: https://www.cnblogs.com/Creed-qwq/p/15665394.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有