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

$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 = ;
x %= MOD, assert(b >= );
for (; b; b >>= , x = x * x % MOD)
if (b & ) re = re * x % MOD;
return re;
}
VI Bm(VI x) {
VI ls, cur;
int pn = , lf, ld;
REP(i, , SZ(x)) {
LL t = -x[i] % MOD;
REP(j, , SZ(cur))
t = (t + x[i - j - ] * (LL)cur[j]) % MOD;
if (!t) continue;
if (cur.empty()) {
cur.resize(i + );
lf = i, ld = t;
continue;
}
LL k = -t * Pow(ld, MOD - ) % MOD;
VI c(i - lf - );
c.pb(-k);
REP(j, , SZ(ls)) c.pb(ls[j] * k % MOD);
if (c.size() < cur.size())
c.resize(cur.size());
REP(j, , 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, , 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) - );
for (int i = ; i < SZ(a); ++i)
for (int j = ; j < SZ(b); ++j)
Ad(c[i + j], (LL)a[i] * b[j] % MOD);
for (int i = SZ(c) - ; i >= k; --i)
for (int j = ; 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 + , );
for (int i = ; i <= k; ++i)
g[k - i] = (MOD - a[i - ]) % MOD;
VI re(, ), x(, );
x[] = ;
for (; n; n >>= , x = Mul(x, x))
if (n & ) re = Mul(re, x);
return re;
}
}

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

  1. 【瞎讲】 Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18)

    [背诵瞎讲] Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18) 看CSP看到一题"线性递推式",不会做,去问了问zsy怎么做,他并 ...

  2. 【Luogu4723】线性递推(常系数齐次线性递推)

    [Luogu4723]线性递推(常系数齐次线性递推) 题面 洛谷 题解 板子题QwQ,注意多项式除法那里每个多项式的系数,调了一天. #include<iostream> #include ...

  3. 常系数齐次线性递推 & 拉格朗日插值

    常系数齐次线性递推 具体记在笔记本上了,以后可能补照片,这里稍微写一下,主要贴代码. 概述 形式: \[ h_n = a_1 h_{n-1}+a_2h_{n-2}+...+a_kh_{n-k} \] ...

  4. 【BZOJ4161】Shlw loves matrixI (常系数齐次线性递推)

    [BZOJ4161]Shlw loves matrixI (常系数齐次线性递推) 题面 BZOJ 题解 \(k\)很小,可以直接暴力多项式乘法和取模. 然后就是常系数齐次线性递推那套理论了,戳这里 # ...

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

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

  6. 【BZOJ4944】[NOI2017]泳池(线性常系数齐次递推,动态规划)

    [BZOJ4944][NOI2017]泳池(线性常系数齐次递推,动态规划) 首先恰好为\(k\)很不好算,变为至少或者至多计算然后考虑容斥. 如果是至少的话,我们依然很难处理最大面积这个东西.所以考虑 ...

  7. Re.常系数齐次递推

    前言 嗯   我之前的不知道多少天看这个的时候到底在干什么呢 为什么那么..  可能大佬们太强的缘故 最后仔细想想思路那么的emmm 不说了  要落泪了 唔唔唔 前置 多项式求逆 多项式除法/取模 常 ...

  8. 2019牛客暑期多校训练营(第五场)- B generator 1 (齐次线性递推+矩阵快速幂)

    题目链接:https://ac.nowcoder.com/acm/contest/885/B 题意:已知齐次线性式xn=a*xn-1+b*xn-2,已知a,b,x0,x1,求xn,n很大,n<= ...

  9. 线性齐次递推式快速求第n项 学习笔记

    定义 若数列 \(\{a_i\}\) 满足 \(a_n=\sum_{i=1}^kf_i \times a_{n-i}\) ,则该数列为 k 阶齐次线性递推数列 可以利用多项式的知识做到 \(O(k\l ...

随机推荐

  1. Vivado中xilinx_courdic IP核(求exp指数函数)使用

    由于Verilog/Vhdl没有计算exp指数函数的库函数,所以在开发过程中可利用cordic IP核做exp函数即e^x值: 但前提要保证输入范围在(-pi/4—pi/4) 在cordic核中e^x ...

  2. 微服务RPC框架选美

    原文:http://p.primeton.com/articles/59030eeda6f2a40690f03629 1.RPC 框架谁最美? Hello,everybody!说到RPC框架,可能大家 ...

  3. 2015520吴思其 基于《Arm试验箱的国密算法应用》课程设计个人报告

    20155200吴思其 基于<Arm试验箱的国密算法应用>课程设计个人报告 课程设计中承担的任务 完成试验箱测试功能4,5,6以及SM3加密实验的实现 测试四 GPIO0按键中断实验 实验 ...

  4. Java实现Zip压缩包解压

        对zip压缩包的解压是比较常见的应用场景,java代码的实现也很简单.废话不多说,直接上代码吧 一.代码 /** * zip解压 * @param srcFile zip源文件 * @para ...

  5. EZ 2018 04 01 ZJOI2018模拟赛04.01

    现在开始填以前的坑 这次老叶强制我们打一下这次省选题,然后我已经做好了掉Rating到死的准备 然后考完--莫名涨了 Orz 题目链接 由于很多东西我都不会,所以详细请看:dalao的题解 T1 我T ...

  6. PHP调用WCF提供的方法

    一.准备工作 1.安装wampserver:过程略 2.配置wampserver: 2.1打开php.ini文件,去掉 ;extension=php_soap.dll 这里那个分号. 也有说把这个 ; ...

  7. Spring+SpringMVC+MyBatis整合基础篇(二)牛刀小试

    前言 承接上文,该篇即为项目整合的介绍了. 废话不多说,先把源码和项目地址放上来,重点要写在前面. 项目展示地址,点这里http://ssm-demo.13blog.site,账号:admin 密码: ...

  8. .NET Core容器化开发系列(零)——计划

    .NET Core相当完善的跨平台特性以及其轻量化的底层接口为我们能顺畅进行微服务开发提供了非常棒的基础. 作为支撑微服务最常见的基础技术--容器化将是本系列的核心内容. 接下来我计划用一个月左右的时 ...

  9. Shell 基础 -- 总结几种括号、引号的用法

    Shell 脚本中经常需要用到一些括号.引号表达式,功能各不相同,本文详细介绍一下. 1.双引号 " " 双引号常用于包含一组字符串,在双引号中,除了 "$". ...

  10. 互评Final版本——二次元梦之队——“I Do”

    基于NABCD评论作品,及改进建议 1.根据(不限于)NABCD评论作品的选题; (1)N(Need,需求) 当今的许多科技大佬从少年时代就已经开始了自己的编程生涯,我国许多人也意识到了拥有编程能力的 ...