当前位置: 首页 > news >正文

常系数齐次线性递推

问题

\(\displaystyle a_n=\sum_{i=1}^{k}f_i\times a_{n-i}\),已知 \(a_{0\sim k-1},f_{1\sim k}\),求 \(a_n\)

子问题

求解 \([x^k]\dfrac{P(x)}{Q(x)}\),其中 \(P,Q\) 均不超过 \(n\) 次,\(k\) 比较巨大。

化为 \([x^k]\dfrac{P(x)Q(-x)}{Q(x)Q(-x)}\)

显然可以发现分母的奇数项系数都是 \(0\) 了。

分讨 \(k\) 的奇偶性,如果 \(k\) 是奇数,就得到 \(\dfrac{xF(x^2)}{G(x^2)}\);否则得到 \(\dfrac{F(x^2)}{G(x^2)}\)。这里 \(F\)\(G\) 只需要使用两次多项式乘法和一些简单转换就能算出来。

然后现在问题就变成了计算 \([x^{k/2}]\dfrac{F(x)}{G(x)}\),一直递归下去直到要求 \([x^0]\dfrac{F(x)}{G(x)}\) 即可,时间复杂度 \(O(n\log n\log k)\)

原问题

现在我们只需要构造出来 \(P,Q\) 就好了。

一种构造是令 \(Q(x)=1-f_1x-f_2x^2-\cdots-f_kx^k\),此时 \(\displaystyle[x^n]P(x)=a_n-\sum_{i=1}^{k}f_ia_{n-i}\),不难发现其在 \(n\ge k\) 时为 \(0\)

那么直接代入 \(P,Q,n\) 当作上面子问题的参数去解决即可。

代码

点击查看代码
#include<bits/stdc++.h>
#define int long long
// #define ll __int128
// #define ull unsigned int
#define N 300005
#define M 200005
#define K 20
// #define B 13331
#define mod 998244353
#define pii pair<int,int>
#define x first
#define y second
#define pct __builtin_popcount
#define mpi make_pair
#define pi acos(-1)
#define inf 2e18
#define poly vector<int>
using namespace std;
int Tc=1,n,k,rev[N],g=3,gg=332748118;
int ksm(int x,int y){int res=1;while(y){if(y&1)(res*=x)%=mod;(x*=x)%=mod;y>>=1;}return res;
}
void ntt(poly &a,int n,int t){for(int i=0;i<n;i++){if(i<rev[i]){swap(a[i],a[rev[i]]);}}for(int len=1;len<n;len<<=1){int w1=ksm((t==1?g:gg),(mod-1)/(len+len));for(int i=0;i<n;i+=len+len){int wk=1;for(int j=0;j<len;j++,wk=wk*w1%mod){int x=a[i+j],y=wk*a[i+j+len]%mod;a[i+j]=(x+y)%mod;a[i+j+len]=(x-y+mod)%mod;}}}if(t==-1){for(int i=0;i<n;i++){a[i]=a[i]*ksm(n,mod-2)%mod;}}
}
int init(int m){int n=1;while(n<m)n<<=1;for(int i=0;i<n;i++){rev[i]=(rev[i>>1]>>1);if(i&1)rev[i]|=(n>>1);}return n;
}
poly operator*(poly a,poly b){int n=a.size()+b.size()-1;int m=init(n);a.resize(m);b.resize(m);ntt(a,m,1);ntt(b,m,1);for(int i=0;i<m;i++){a[i]=a[i]*b[i]%mod;}ntt(a,m,-1);return a;
}
int bm(poly p,poly q,int n){while(n){poly qq=q;for(int i=1;i<q.size();i+=2){qq[i]=mod-q[i];}p=p*qq;q=q*qq;int i=(n&1);while(i<p.size()){p[i>>1]=p[i];i+=2;}p.resize(i>>1);i=0;while(i<q.size()){q[i>>1]=q[i];i+=2;}q.resize(i>>1);n>>=1;}if(!p.size())return 0;return p[0]*ksm(q[0],mod-2)%mod;
}
int f[N],a[N];
void solve(int cs){if(!cs)return;cin>>n>>k;for(int i=1;i<=k;i++){cin>>f[i];f[i]=(f[i]%mod+mod)%mod;}for(int i=0;i<k;i++){cin>>a[i];a[i]=(a[i]%mod+mod)%mod;}poly p,q,r;q.resize(k+1);q[0]=1;for(int i=1;i<=k;i++){q[i]=mod-f[i];}r.resize(k);for(int i=0;i<k;i++){r[i]=a[i];}p=q*r;p.resize(k);cout<<bm(p,q,n)<<'\n';
}
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);// cin>>Tc;// init();for(int cs=1;cs<=Tc;cs++){solve(cs);}// cerr<<clock()*1.0/CLOCKS_PER_SEC<<'\n';// cerr<<(&st-&ed)/1048576.0<<'\n';return 0;
}
http://www.rkmt.cn/news/1426529.html

相关文章:

  • 2026最新南阳市黄金回收铂金回收白银回收怎么选?多家靠谱门店实测对比及联系方式推荐 - 亦辰小黄鸭
  • 2026年嘉兴市本地黄金回收白银回收铂金回收靠谱门店权威榜第一名:足金首饰+投资金条+银条+旧料黄金上门变现无套路收费+门店地址及联系方式推荐 - 前途无量YY
  • 2026年武汉旧房翻新深度调研:覆盖6区480户业主回访与权威评测 - 优家闲谈
  • 2026最新芜湖市黄金回收铂金回收白银回收怎么选?多家靠谱门店实测对比及联系方式推荐 - 亦辰小黄鸭
  • 2026年嘉峪关市本地黄金回收白银回收铂金回收靠谱门店权威榜第一名:足金首饰+投资金条+银条+旧料黄金上门变现无套路收费+门店地址及联系方式推荐 - 前途无量YY
  • 2026年江门市本地黄金回收白银回收铂金回收靠谱门店权威榜第一名:足金首饰+投资金条+银条+旧料黄金上门变现无套路收费+门店地址及联系方式推荐 - 前途无量YY
  • 装修全屋定制高频问答:新手一站式答疑解惑
  • python 使用命令 pip install xxx,安装库失败时
  • 2026年焦作市本地黄金回收白银回收铂金回收靠谱门店权威榜第一名:足金首饰+投资金条+银条+旧料黄金上门变现无套路收费+门店地址及联系方式推荐 - 前途无量YY
  • 从“省电”到“翻车”:深入聊聊NRF24L01+待机模式的那些选择与代价
  • 如何用普通摄像头实现医疗级心率监测:rPPG-Toolbox深度技术解析
  • 2026最新平顶山市黄金回收铂金回收白银回收怎么选?多家靠谱门店实测对比及联系方式推荐 - 亦辰小黄鸭
  • Wwise音频处理工具:游戏音效解包与替换的Go语言实现方案
  • 2026年金昌市本地黄金回收白银回收铂金回收靠谱门店权威榜第一名:足金首饰+投资金条+银条+旧料黄金上门变现无套路收费+门店地址及联系方式推荐 - 前途无量YY
  • 别再傻等接口了!用Playwright的Route拦截,5分钟搞定Mock数据(Python版)
  • hermes多Agent协作开发
  • 别再手动建表了!用SpringBoot JPA + PostgreSQL自动生成表结构(附ddl-auto配置详解)
  • 不止于绑定:在UE4里用骨骼插槽和Actor实现可交互的武器系统原型
  • S_Tide进阶指南:如何为卫星测高和不规则数据选择正确的调和分析模型(从s_tide_m3到m8详解)
  • 2026年|拒绝退稿!10款降AI率工具红黑榜揭秘(手把手去AI痕迹攻略) - 降AI实验室
  • 2026最新潮州市黄金回收铂金回收白银回收怎么选?多家靠谱门店实测对比及联系方式推荐 - 亦辰小黄鸭
  • 2026年晋城市本地黄金回收白银回收铂金回收靠谱门店权威榜第一名:足金首饰+投资金条+银条+旧料黄金上门变现无套路收费+门店地址及联系方式推荐 - 前途无量YY
  • ESPHome入门16-语音助手(高级玩法:用ESP32-S3打造本地语音控制)
  • 通用医疗电源板从0到1高水平总体设计方案
  • Arm Cortex-R52+ TCM架构解析与优化实践
  • Dell OptiPlex 7080/5090/300 安装CentOS 7.5保姆级避坑指南(UEFI+阿里云镜像)
  • 3种方法重塑右键菜单:ContextMenuManager可视化管理系统实战指南
  • AB测试:新用户引导
  • 避坑指南:用VMware装Ubuntu 22.04时,这两个勾选千万别搞错(影响网卡和视频播放)
  • 别只看FPS了!Unity Game视图Stats面板全解读,从‘Batches’到‘Tris’的优化指南