这里所有的内容都将有关于一个线性递推:

$f_{n} = \sum\limits_{i = 1}^{k} a_{i} * f_{n - i}$,其中$f_{0}, f_{1}, ... , f_{k - 1}$是已知的。

BM是用于求解线性递推式的工具,传入一个序列,会返回一个合法的线性递推式,一个$vector$,其中第$i$项表示上式的$a_{i + 1}$。

CH用于快速求解常系数齐次线性递推的第$n$项,我们先会求出一个特征多项式$g$,$g$的第$k$项是$1$,其余项中第$k - i$项是$-a_{i}$。然后可以得到$c = x^{n} \; mod  \; g$这么一个多项式,最后的答案就是$\sum\limits_{i = 0}^{k - 1} c_{i} * f_{i}$,这里用$c_{i}$表示$c$中第$i$项的系数。

其实这里只是想给出两者的板子,素质二连:

namespace BM{
#define pb push_back
#define SZ(x) ((int)x.size())
#define REP(i, a, b) for (int i = a; i < b; ++i)LL Pow(LL x, LL b) {LL re = 1;x %= MOD, assert(b >= 0);for (; b; b >>= 1, x = x * x % MOD)if (b & 1) re = re * x % MOD;return re;}VI Bm(VI x) {VI ls, cur;int pn = 0, lf, ld;REP(i, 0, SZ(x)) {LL t = -x[i] % MOD;REP(j, 0, SZ(cur))t = (t + x[i - j - 1] * (LL)cur[j]) % MOD;if (!t) continue;if (cur.empty()) {cur.resize(i + 1);lf = i, ld = t;continue;}LL k = -t * Pow(ld, MOD - 2) % MOD;VI c(i - lf - 1);c.pb(-k);REP(j, 0, SZ(ls)) c.pb(ls[j] * k % MOD);if (c.size() < cur.size())c.resize(cur.size());REP(j, 0, SZ(cur))c[j] = (c[j] + cur[j]) % MOD;if (i - lf + SZ(ls) >= SZ(cur))ls = cur, lf = i, ld = t;cur = c;}VI &o = cur;REP(i, 0, SZ(o))o[i] = (o[i] % MOD + MOD) % MOD;return o;}
}namespace CH {
#define SZ(x) ((int)x.size())VI g;int k;inline void Ad(int &a, int b) {if ((a += b) >= MOD) a -= MOD;}VI Mul(VI a, VI b) {VI c;assert(SZ(a) <= k && SZ(b) <= k);c.resize(SZ(a) + SZ(b) - 1);for (int i = 0; i < SZ(a); ++i)for (int j = 0; j < SZ(b); ++j)Ad(c[i + j], (LL)a[i] * b[j] % MOD);for (int i = SZ(c) - 1; i >= k; --i)for (int j = 0; j <= k; ++j)Ad(c[i - k + j], MOD - (LL)c[i] * g[j] % MOD);c.resize(k);return c;}VI Solve(VI a, int n) {k = SZ(a);g.resize(k + 1, 1);for (int i = 1; i <= k; ++i)g[k - i] = (MOD - a[i - 1]) % MOD;VI re(1, 1), x(2, 1);x[0] = 0;for (; n; n >>= 1, x = Mul(x, x))if (n & 1) re = Mul(re, x);return re;}
}

View Code

转载于:https://www.cnblogs.com/Dance-Of-Faith/p/9810513.html

【模板】BM + CH(线性递推式的求解,常系数齐次线性递推)相关推荐

  1. 常系数齐次线性递推学习笔记

    定义 对于数列fff,如果有递推式 fn=∑i=1kai×fn−i(n≥k)f_n=\sum_{i=1}^k a_i\times f_{n-i} \quad (n\geq k)fn​=i=1∑k​ai ...

  2. 【学习小记】常系数齐次线性递推

    问题引入 给出数列 g g g,满足当 n > m n>m n>m时 g n = ∑ i = 1 m g n − i × a i g_n=\sum\limits_{i=1}^{m}g ...

  3. BZOJ4161 常系数齐次线性递推

    问了数竞的毛毛搞了一番也没太明白,好在代码蛮好写先记下吧. 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=4 ...

  4. [常系数(非)齐次线性递推]

    从一个朴素的问题出发:我们需要求出一个序列b[],使得符合递推式 f(n)=∑i=1..kcif(n−i) f ( n ) = ∑ i = 1.. k c i f ( n − i ) f(n)=\su ...

  5. 算法分析中递推式的一般代数解法

    算法分析中经常遇到需要求解递推式的情况,即将递推式改写为等价的封闭形式.例如汉诺塔问题的时间复杂度递推形式为T(n)=2T(n−1)+1(n≥1)T(n)=2T(n−1)+1(n≥1),可以解出封闭形 ...

  6. 【组合数学】二项式定理与组合恒等式 ( 二项式定理 | 三个组合恒等式 递推式 | 递推式 1 | 递推式 2 | 递推式 3 帕斯卡/杨辉三角公式 | 组合分析方法 | 递推式组合恒等式特点 )

    文章目录 一.二项式定理 二.组合恒等式 ( 递推式 1 ) 三.组合恒等式 ( 递推式 2 ) 四.组合恒等式 ( 递推式 3 ) 帕斯卡 / 杨辉三角公式 五.组合分析方法 六.递推式组合恒等式特 ...

  7. 超前进位加法器原理与递推式超详细推导+verilog实现与测试

    当记忆的线缠绕过往支离破碎,是慌乱占据了心扉.----<寂寞沙洲冷> 超前进位加法器原理 1. 一位二进制的加法 首先考虑两个1位二进制相加 a+b,不考虑上一级的进位,0和1简单相加,即 ...

  8. 推式配货(Push)、拉式配货(Pull)和配送需求计划(DRP)的区别

    随着电子商务的迅猛发展,物流配送服务已然成为企业竞争最为核心的环节,一个全面.完善的物流配送方案,能够帮助企业满足客户交期.节约运输和库存成本,促进各环节沟通,提高生产稳定性.同时,物流配送的许多环节 ...

  9. 市场调研—全球与中国手推式扫地机市场现状及未来发展趋势

    [报告篇幅]:126 [报告图表数]:171 [报告出版时间]:2021年1月 2019年,全球手推式扫地机市场规模达到了xx亿元,预计2026年将达到xx亿元,年复合增长率(CAGR)为xx%. 本 ...

最新文章

  1. 自定义Push和Pop过渡动画
  2. ASP.NET MVC 3 RTM
  3. Serilog 日志框架如何自动删除超过 N 天的日志 ?
  4. leetcode初级算法3.存在重复元素
  5. php键值对数组排序,PHP按指定键值对二维数组进行排序的方法_PHP
  6. 一行python代码值多少钱_一行python代码
  7. 开源 | 高颜值神经网络可视化工具
  8. 微服务开发及部署_基于 Kubernetes 的微服务部署即代码
  9. Asp.Net母版页和内容页运行机制
  10. linux服务器配置python环境_服务器python环境配置福利,CentOS ,Linux 一键下载python3和环境配置...
  11. Python:使用ctypes库调用外部DLL
  12. 微支付几个参数的获得
  13. 从0到1设计通用数据大屏搭建平台
  14. 支付宝小程序下单支付接口:40004 ACQ.INVALID_PARAMETER
  15. 通过c#打开pdf文件
  16. spring boot redisLock redis分布式锁
  17. 快速上手IntelliJ IDEA常用快捷键
  18. 搭载“鸿蒙”的华为Watch 3,是智能手表的标准答案吗?
  19. windows双系统如何删除ubuntu系统并重装
  20. 全国英语计算机等级考试报名费,通知 | 全国大学生英语竞赛计算机等级考试报名...

热门文章

  1. java位运算(、|、 ~、、 、 ^)
  2. Splash resource_timeout 属性
  3. IP地址转换函数——inet_pton inet_ntop inet_aton inet_addr inet_ntoa
  4. jQuery 的属性操作方法
  5. Java串口通信具体解释
  6. DLL程序组件Microsoft Reporting Services Barcode Custom Report Item
  7. ASP.NET 程序中常用的三十三种代码(1)
  8. 图像优化算法(HE、AHE、CLAHE)简单介绍
  9. linux内核数据结构实现--链表、队列和哈希
  10. (4)verilog语言编写计数器