题目背景

大家都知道,斐波那契数列是满足如下性质的一个数列:

• f(1) = 1

• f(2) = 1

• f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数)

题目描述

请你求出 f(n) mod 1000000007 的值。

输入格式

·第 1 行:一个整数 n

输出格式

第 1 行: f(n) mod 1000000007 的值

输入输出样例

输入 #1 复制

5

输出 #1 复制

5

输入 #2 复制

10

输出 #2 复制

55

说明/提示

对于 60% 的数据: n ≤ 92

对于 100% 的数据: n在long long(INT64)范围内。

解析:

\(\displaystyle \begin{array}{{>{\displaystyle}l}}
\ 现在我需要求的矩阵是:\\
\begin{bmatrix}
f[ i]\\
f[ i-1]
\end{bmatrix}\\
根据题目中给出的条件:f[ i] =f[ i-1] +f[ i-2]\\
下一步求f[ i+1]\\
所以求初始矩阵为\\
\begin{bmatrix}
1 & 1\\
1 & 0
\end{bmatrix}\\
对初始矩阵进行矩阵快速幂然后输出a[ 1][ 1]
\end{array}\)

#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <queue>
#include <stack>
#define re register
#define Max 200000012
#define int long long
int n;
const int mod=1000000007;
struct Mat {
int a[3][3];
Mat() {memset(a,0,sizeof a);}
inline void build() {
memset(a,0,sizeof a);
for(re int i = 1 ; i <= 2 ; ++ i) a[i][i]=1;
}
};
Mat operator*(Mat &a,Mat &b)
{
Mat c;
for(re int k = 1 ; k <= 2 ; ++ k)
for(re int i = 1 ; i <= 2 ; ++ i)
for(re int j = 1 ; j <= 2 ; ++ j)
c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j]%mod)%mod;
return c;
}
Mat a;
Mat quick_Mat(int x)
{
Mat ans;ans.build();
while(x) {
if((x&1)==1) ans = ans * a;
a = a * a;
x >>= 1;
}
return ans;
}
signed main()
{
scanf("%lld",&n);
a.a[1][1]=1;a.a[1][2]=1;
a.a[2][1]=1;Mat b;
b.a[1][1]=1;b.a[2][1]=1;
if(n>=1 && n<=2) {
printf("1");return 0;
}
Mat ans=quick_Mat(n-2);
ans=ans*b;
printf("%lld",ans.a[1][1]);
return 0;
}

洛谷P1962 斐波那契数列题解的更多相关文章

  1. 洛谷P1962 斐波那契数列【矩阵运算】

    洛谷P1962 斐波那契数列[矩阵运算] 题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) ( ...

  2. 洛谷P1962 斐波那契数列 || P1349 广义斐波那契数列[矩阵乘法]

    P1962 斐波那契数列 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数 ...

  3. 洛谷——P1962 斐波那契数列

    P1962 斐波那契数列 题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 ...

  4. 洛谷—— P1962 斐波那契数列

    https://www.luogu.org/problem/show?pid=1962 题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f ...

  5. 洛谷P1962 斐波那契数列(矩阵快速幂)

    题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数) 题目描述 请 ...

  6. 【洛谷P1962 斐波那契数列】矩阵快速幂+数学推导

    来提供两个正确的做法: 斐波那契数列双倍项的做法(附加证明) 矩阵快速幂 一.双倍项做法 在偶然之中,在百度中翻到了有关于斐波那契数列的词条(传送门),那么我们可以发现一个这个规律$ \frac{F_ ...

  7. 洛谷 P1962 斐波那契数列

    题目链接:https://www.luogu.org/problemnew/show/P1962 题目大意: 略 分析: 由于数据规模很大,需要用矩阵快速幂来解. 代码如下: #pragma GCC ...

  8. 题解——洛谷P1962 斐波那契数列(矩阵乘法)

    矩阵乘法加速线性递推的典型 大概套路就是先构造一个矩阵\( F \)使得另一初始矩阵\( A \)乘以\( F^{x} \)能够得出第n项 跑的飞快 虽然我也不知道那个矩阵要怎么构造 或许就像我使用了 ...

  9. 洛谷P1962 斐波那契数列

    传送门 不难得到状态转移矩阵 然后带进去乱搞 //minamoto #include<iostream> #include<cstdio> #include<cstrin ...

随机推荐

  1. InheritableThreadLocal详解

    InheritableThreadLocal详解     https://www.jianshu.com/p/94ba4a918ff5 InheritableThreadLocal——父线程传递本地变 ...

  2. phoenix kerberos 连接配置

    1. 官网资料 Use JDBC to get a connection to an HBase cluster like this: Connection conn = DriverManager. ...

  3. .Net Core WebAPI开启静态页,设置主页

    1.使用场景 默认创建的.Net Core WebAPI应用在运行时是没有页面显示的,效果如下: 那么,如果想要给API设置一个主页,应该怎么做呢?这就需要用到本文提供的方法. 2.设置方法 (1)首 ...

  4. quota - linux磁盘配额管理

    磁盘管理系列 linux磁盘管理系列一:磁盘配额管理   http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_040_quota.html l ...

  5. 人脸跟踪开源项目HyperFT代码算法解析及改进

    一.简介 人脸识别已经成为计算机视觉领域中最热门的应用之一,其中,人脸信息处理的第一个环节便是人脸检测和人脸跟踪.人脸检测是指在输入的图像中确定所有人脸的位置.大小和姿势的过程.人脸跟踪是指在图像序列 ...

  6. springmvc处理json数据

    springMVC提供了处理JSON格式请求/响应的HttpMessageConverter MappingJckson2HttpMessageConverter利用Jackson开源类包处理JSON ...

  7. 解决服务器kipmid导致的CPU核心负载问题

    临时解决 echo 100 > /sys/module/ipmi_si/parameters/kipmid_max_busy_us 永久生效配置/etc/modprobe.d/ipmi.conf ...

  8. SAP CDS redirect view支持写操作吗,一个实验来验证

    According to this wiki, write back on CDS view is not supported: And also it is defined in ABAP help ...

  9. Mysql 游标初识

    MySql 游标初识 认识 游标(cursor), 按字面意思可理解为, 游动的标识, 或者叫做"光标", 这样更容易理解. 就好比现有一张表存储了n行记录, 然后我想每次取出一行 ...

  10. 一招解决------VMware虚拟机 Centos7网络配置 ping:www.baidu.com:未知的名称或服务 ping不通

    一招解决------VMware虚拟机 Centos7网络配置 ping:www.baidu.com:未知的名称或服务 ping不通 1.首先点击VMware的编辑,再点击虚拟网路编辑器. 2.进入虚 ...