线性递推

线性递推

bostan-mori

假设答案的 ogf 是 F(x),若 F(x)=P(x)Q(x),对 Q(x)F(x)=P(x) 两边提取 [xn] 发现是个线性递推。

现在来直接计算 [xn]P(x)Q(x),上下同乘 Q(x) 得到 P(x)Q(x)Q(x)Q(x),这时分母的奇数项都变成 0 了,那么算除法的时候分子的奇数项和偶数项之间就独立了。

假如 n 是奇数,那么分子只有奇数项有用,于是可以看成求 [xn]=xU(x2)V(x2)=[xn12]U(x)V(x),这里 U(x) 就是 P(x)Q(x) 只把奇数项取出来然后从 0 往后排得到的多项式。偶数项的递归也是类似的。

只会递归 log 次,那么这个算法的复杂度就是 O(klogklogn) 的。

//[x^n]p(x)/q(x)
auto adjust=[&](Poly &f,int o){
	int i;
	for(i=o;i<(int)f.size();i+=2)
		f[i/2]=f[i];
	f.resize(i/2);
};
while(n){
	int o=(n&1);n>>=1;
	Poly rq=q;
	for(int i=1;i<(int)rq.size();i+=2)rq[i]=del(0,rq[i]);
	q=q*rq;
	adjust(q,0);
	p=p*rq;
	if(!o)adjust(p,0);
	else adjust(p,1);
}
if(p.size())cout<<1ll*p[0]*qpow(q[0],mod-2)%mod<<'\n';
else puts("0");
posted @   do_while_true  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?

This blog has running: 1845 days 1 hours 33 minutes 18 seconds

点击右上角即可分享
微信分享提示