博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【POJ】3070 Fibonacci
阅读量:5846 次
发布时间:2019-06-18

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

【算法】矩阵快速幂

【题解】

根据f[n]=f[n-1]+f[n-2],可以构造递推矩阵:

$$\begin{vmatrix}1 & 1\\ 1 & 0\end{vmatrix} \times \begin{vmatrix}f_n \\ f_{n-1} \end{vmatrix}=\begin{vmatrix}f_{n+1}\\f_n\end{vmatrix}\\$$

写成幂形式:

$$\begin{vmatrix}1 & 1\\ 1 & 0\end{vmatrix}^n \times \begin{vmatrix}1 \\ 0\end{vmatrix}=\begin{vmatrix}f_{n+1}\\f_n\end{vmatrix}$$

矩阵快速幂。

#include
#include
#include
using namespace std;const int n=2,MOD=10000;int a[n][n],b[n][n],t[n][n],m;void mul(int a[n][n],int b[n][n],int ans[n][n]){ for(int i=0;i
0) { if(m&1)mul(a,b,b); m>>=1; mul(a,a,a); } printf("%d\n",b[0][0]); scanf("%d",&m); } return 0;}
View Code

 

可以发现|1 0|乘上之后没有任何变化,所以可以得到更好看的式子:

$$\begin{vmatrix}1 & 1\\ 1 & 0\end{vmatrix}^n=\begin{vmatrix}f_{n+1} & f_n\\ f_n & f_{n-1}\end{vmatrix}$$

用来推性质十分方便,适用于n∈Z(可以是负数)。

转载于:https://www.cnblogs.com/onioncyc/p/6525931.html

你可能感兴趣的文章
[linux]查看机器有几个cpu,是否支持64位
查看>>
eclipse 3.x中热部署WEB程序TOMCAT配置
查看>>
Linux平台Java调用so库-JNI使用例子
查看>>
PCM数据格式,多少字节算一帧
查看>>
python获取当前路径的方法
查看>>
kbengine mmo源码(完整服务端源码+资源+完整客户端源码)
查看>>
Spring Data JPA
查看>>
uva 10099 The Tourist Guide
查看>>
置换元素和非置换元素
查看>>
Selenium中的xpath定位
查看>>
思索问题
查看>>
KACK的处理方法
查看>>
一个CSS上中下三行三列结构的Div布局
查看>>
SqlDataAdapter的增加,删除,修改
查看>>
js字符串编码和unicode编码互转
查看>>
POJ3438 ZOJ2886 UVALive3822 Look and Say【数列】
查看>>
About scrum reports
查看>>
IE6的height小BUG
查看>>
equals()与hashCode()方法协作约定
查看>>
docker~学习笔记索引
查看>>