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. go语言之行--网络编程、http处理流程详情

    一.简介 go语言中的网络编程主要通过net包实现,net包提供了网络I/O接口,包括HTTP.TCP/IP.UDP.域名解析和Unix域socket等.和大多数语言一样go可以使用几行代码便可以启动 ...

  2. WebService快速上手

    一.WebService是什么? 核心特征:跨语言.跨平台.远程调用[如果是本地系统交互,使用rpc或者com技术就行] soap:HTTP + XML [基于Http的xml格式数据交互] wsdl ...

  3. [arc076F]Exhausted?[霍尔定理+线段树]

    题意 地上 \(1\) 到 \(m\) 个位置摆上椅子,有 \(n\) 个人要就座,每个人都有座位癖好:选择 \(\le L\) 或者 \(\ge R\) 的位置.问至少需要在两边添加多少个椅子能让所 ...

  4. cookie提取dex文件

    有时候在java层能获取dex文件的cookie,但是在java不能从cookie得到dex,如果想要获取只能通过jni在C层实现,具体实现代码如下(nexus手机4.4系统) static void ...

  5. Spring的单例模式底层实现学习笔记

    单例模式也属于创建型模式,所谓单例,顾名思义,所指的就是单个实例,也就是说要保证一个类仅有一个实例.单例模式有以下的特点:①单例类只能有一个实例②单例类必须自己创建自己的唯一实例③单例类必须给所有其他 ...

  6. SpringBoot日记——Redis整合

    上一篇文章,简单记录了一下缓存的使用方法,这篇文章将把我们熟悉的redis整合进来. 那么如何去整合呢?首先需要下载和安装,为了使用方便,也可以做环境变量的配置. 下载和安装的方法,之前有介绍,在do ...

  7. DFA化简

    首先是未化简DFA的转换表 NFA状态 DFA状态 a b {0,1,2,4,7} A B C {1,2,3,4,6,7,8} B B D {1,2,4,5,6,7} C B C {1,2,4,5,6 ...

  8. 关于InfiniBand几个基本知识点解释

    文章出处: https://blog.csdn.net/BtB5e6Nsu1g511Eg5XEg/article/details/83629279 公众号 https://blog.csdn.net/ ...

  9. 开源一个最近写的spring与mongodb结合的demo(spring-mongodb-demo)

    由于工作需要,给同事们分享了一下mongodb的使用,其中主要就是做了一个spring-data+mongodb的小例子,本着分享的精神,就上传到了github.com上,有需要的同学请移步githu ...

  10. Linux内核分析 实验三:跟踪分析Linux内核的启动过程

    贺邦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一. 实验过程 ...