【51Nod】1242 斐波那契数列的第N项
来源:互联网 发布:计算机编程与维护 编辑:程序博客网 时间:2024/06/07 04:54
题意
斐波那契数列的定义如下:
F(0) = 0
F(1) = 1
F(n) = F(n - 1) + F(n - 2) (n >= 2)
(1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, …)
给出n,求F(n),由于结果很大,输出F(n) % 1000000009的结果即可。
解题思路
然后采用矩阵快速幂即可。
参考代码
#include <iostream> #include <math.h> #include <stdio.h> using namespace std; typedef long long ll; struct Matrix{ ll mat[2][2]; }; Matrix mul(Matrix a,Matrix b,ll mod){ Matrix ans; for (int i=0;i<2;i++){ for (int j=0;j<2;j++){ ans.mat[i][j]=0; for (int k=0;k<2;k++){ ans.mat[i][j]=(ans.mat[i][j]+a.mat[i][k]*b.mat[k][j]); ans.mat[i][j]%=mod; } } } return ans; } Matrix Init(){ Matrix ans; for (int i=0;i<2;i++){ for (int j=0;j<2;j++){ if (i==j) ans.mat[i][j]=1; else ans.mat[i][j]=0; } } return ans; } Matrix exp(Matrix a,ll k,ll m){ Matrix ans=Init(); while (k){ if (k&1) ans=mul(ans,a,m); a=mul(a,a,m); k>>=1; } return ans; } int main(){ Matrix M; ll n; ll m=1000000009; while (~scanf("%lld",&n)){ M.mat[0][0]=1; M.mat[1][1]=0; M.mat[0][1]=1; M.mat[1][0]=1; Matrix ans=exp(M,n-1,m); ll x=ans.mat[0][0]; cout<<x<<endl; } return 0; }
阅读全文
0 0
- 51nod 1242 1242 斐波那契数列的第N项
- 20140911 【 初等数论 】 51nod 1242 . 斐波那契数列的第N项
- 51nod 1242 斐波那契数列的第N项(矩阵快速幂)
- 51nod 1242 斐波那契数列的第N项【矩阵快速幂】
- 51nod 1242 斐波那契数列的第N项 (矩阵快速幂)
- 51Nod 1242 斐波那契数列的第N项
- 51Nod-1242-斐波那契数列的第N项
- 51nod:1242 斐波那契数列的第N项
- 【51Nod】1242 - 斐波那契数列的第N项(矩阵快速幂)
- 51nod 1242 斐波那契数列的第N项(矩阵快速幂)
- 51nod 1242 斐波那契数列的第N项(O(logn)求递推式)
- 51nod 1242 斐波那契数列的第N项
- 51nod 1242 斐波那契数列的第N项
- 51NOD 1242 斐波那契数列的第N项
- [51NOD]-1242 斐波那契数列的第N项 [矩阵快速幂]
- 【51Nod】1242 斐波那契数列的第N项
- 51nod 1242 斐波那契数列的第N项
- 51 nod 1242 斐波那契数列的第N项 矩阵快速幂
- 在ACM竞赛中string的几个基本操作
- WAVE文件的头格式(例如PCM文件)
- Javascript进阶(一)
- sscanf的具体用法
- iOS 对象序列化与反序列化
- 【51Nod】1242 斐波那契数列的第N项
- Android中的动画机制
- [论文笔记]A-Fast-RCNN: Hard Positive Generation via Adversary for Object Detection
- python---mysql基本操作3
- 基于redis实现的分布式锁
- linux下pcie设备驱动
- WEB:python CGI 交互式界面实现
- JAVA程序员上自由职客 发展与高薪两不误
- c++幕后写的函数及运行时调用的函数