博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[学习笔记]Cayley-Hilmiton
阅读量:5911 次
发布时间:2019-06-19

本文共 1197 字,大约阅读时间需要 3 分钟。

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

 

 

简而言之:

是一个知道递推式,快速求第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】

 

 

转载于:https://www.cnblogs.com/Miracevin/p/10222575.html

你可能感兴趣的文章
LVM Linear vs Striped Logical Volumes
查看>>
Mysql主从备份和SQL语句的备份
查看>>
DEDECMS之三 首页、列表页怎么调用文章内容
查看>>
异步与并行~大话目录
查看>>
iOS开发多线程篇 09 —NSOperation简单介绍
查看>>
WINDOWS下调用GetTokenInformation的奇怪之处--两次调用
查看>>
HDU 5813 Elegant Construction 构造
查看>>
Tomcat就是个容器,一种软件
查看>>
php结合redis实现高并发下的抢购、秒杀功能
查看>>
统计服务连接状况
查看>>
Quartz 框架的应用
查看>>
Tomcat编译jsp生成Servlet文件的存放位置
查看>>
Android事件总线(三)otto用法全解析
查看>>
Android 利用线程运行栈StackTraceElement设计Android日志模块
查看>>
SSD硬盘的4K对齐
查看>>
关闭CENTOS不必要的默认服务
查看>>
MarkdownPad2.5 注册码
查看>>
mybatis指定jdbctype
查看>>
pat解题报告【1082】
查看>>
Java IO详解(七)------随机访问文件流
查看>>