CayleyHamilton theorem - Wikipedia

其实不是理解很透彻,,,先写上

简而言之:

是一个知道递推式,快速求第n项的方法

k比较小的时候可以用矩阵乘法

k是2000,n是1e18呢?

思想:求出开始的k项的每一项对第n项的贡献

特征多项式,,

fibonacci:

f[n]=f[n-1]+f[n-2]

x^2=x+1

推广:

f[n]=af[n-1]+bf[n-2]

x^2=ax+b*1

再推广:

f[n]=a1f[n-1]+a2f[n-2]+...+akf[n-k]

x^k=a1x^(k-1)+...+ak

特征多项式就是左边移动过去:x^2-x-1=0

其实本质是:

x是转移矩阵。

必然有x^2-x-1=0成立

具体的证明以及用法

$B*A^n=F_n$

$B*A^{n-1}=F_{n-1}$

...

$B*A^{n-k}=F_{n-k}$

如果有:$F_n=\sum_{i=1}^k ai*F_{n-i}$

那么可以把第一个式子减去后面k个等式的乘上$a_i$的和得到:

$B*(A^n-a_{1}A^{n-1}-.....-a_{k}A^{n-k})=0$

必然有:$(A^n-a_{1}A^{n-1}-.....-a_{k}A^{n-k})=0$

不妨用x来代替A

$x^{k}-\sum_{i=0}^{k-1} a_0*x^{k-1-i}=0$

对于$x^n$,一定可以写成:$x^n=(x^{k}-\sum_{i=0}^{k-1} a_0*x^{k-1-i})*g(x)+r(x)$

可以得到:

$A^n=r(A)$

设$r(A)=\sum_{i=0}^{k-2} bi*A^{k-2-i}$

同时乘上初始矩阵$B$

$B*A^n=\sum_{i=0}^{k-2} bi*B*A^{k-2-i}$

关注后面的:$B*A^{k-2-i}$

两种处理方法:

$B*A^{k-2-i}$的最大下标的元素就是$F_{2*k-2-i}$,

我们需要提前推出$F_k \to F_{2*k-2}$然后每一个依次乘上对应的系数$b_i$即可(n要提前-=k)

或者,$B*A^{k-2-i}$的最小下标的元素就是$F_{k-2-i}$,然后每一个依次乘上对应的系数$b_i$即可(n就不用动了)

至于$r(x)$的求法

1.暴力多项式除法(n太大和暴力没有区别)

2.倍增+暴力多项式取mod

​ 计算$x=T \space mod \space A$自乘得到:$x^2=T^2 \space mod \space A$,再暴力取模(由于A的首项是1,所以不用逆元O(k^2)即可)

类似快速幂一样乘到答案多项式里去

O(k^2logn)

3.暴力取模变成多项式除法O(klognlogk)

例题:

【BZOJ4161】

NOI2017]泳池——概率DP+线性递推

[学习笔记]Cayley-Hilmiton的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  10. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

随机推荐

  1. 20155330 《网络对抗》 Exp9 web安全基础实践

    20155330 <网络对抗> Exp9 web安全基础实践 实验问题回答 SQL注入攻击原理,如何防御 原理:SQL注入攻击值得是通过构建特殊的输入作为参数传入web应用程序,而这些输入 ...

  2. 几种flash存储芯片的用途和分类

    1.IIC EEPROM------容量小,采用的是IIC通信协议:用于在掉电时,存系统配置参数,比如屏幕亮度等.常用芯片型号有 AT24C02.FM24C02.CAT24C02等,其常见的封装多为D ...

  3. 【第九课】MriaDB密码重置和慢查询日志

    目录 1.如何进行修改MariaDB的密码 2.Mariadb的慢查询日志 1.如何进行修改MariaDB的密码 记得root密码的修改方式: [root@localhost ~]# mysqladm ...

  4. CS100.1x-lab4_machine_learning_student

    这是这门课第一次接触机器学习,主题是Predicting Movie Ratings.难度比上一次作业要简单点..上一次作业真的挺难...相关ipynb文件见我github. 这里我们会用到Spark ...

  5. Spring Boot (十四): Spring Boot 整合 Shiro-登录认证和权限管理

    这篇文章我们来学习如何使用 Spring Boot 集成 Apache Shiro .安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求.在 Java 领域一般有 Spring S ...

  6. NodeJs学习一NodeJs初识

    一.前言 按照惯例,先扯淡,就因为这货,现在才有了各大公司招聘的全栈工程师,正是因为它,让以前只会写前端的人也能写起后端服务器代码来了.所以呢,你招一个会NodeJs的前端,它都能把后端干了,一个人干 ...

  7. Windows下fabric sdk连接Linux上fabric网络的调试过程

    上个月刚入职一家公司从事区块链研发工作,选型采用Hyperledger Fabric作为开发平台.团队的小组成员全部采用的是在VirtualBox上面安装桌面版的Ubuntu 16.04虚拟机,开发工 ...

  8. 初始化Weex项目遇到的问题记录

    Weex 提供了一个命令行工具 weex-toolkit 来帮助开发者使用 Weex.它可以用来快速创建一个空项目.初始化 iOS 和 Android 开发环境.调试.安装插件等操作. 目前 weex ...

  9. Daily Scrum NO.8

    工作概况 今天是周六,虽然由于工作紧张要求这一日也定为工作日,但是也许是因为昨日大家工作做得较多或者周末的缘故,今天的进展状况并不理想.线程池和异常清理器的后端已经完成,而清理器的界面和动态爬取仍旧没 ...

  10. C语言版本:单链表的实现(优化版本)

    未优化版本:http://www.cnblogs.com/duwenxing/p/7569376.html slist.h #ifndef __SLIST_H__ #define __SLIST_H_ ...