Fibonacci(矩阵快速幂模板)
来源:互联网 发布:剑灵灵族捏脸数据图 编辑:程序博客网 时间:2024/06/14 08:35
In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. For example, the first ten terms of the Fibonacci sequence are:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …
An alternative formula for the Fibonacci sequence is
.
Given an integer n, your goal is to compute the last 4 digits of Fn.
Input
The input test file will contain multiple test cases. Each test case consists of a single line containing n (where 0 ≤ n ≤ 1,000,000,000). The end-of-file is denoted by a single line containing the number −1.
Output
For each test case, print the last four digits of Fn. If the last four digits of Fn are all zeros, print ‘0’; otherwise, omit any leading zeros (i.e., print Fn mod 10000).
Sample Input
0
9
999999999
1000000000
-1
Sample Output
0
34
626
6875
Hint
As a reminder, matrix multiplication is associative, and the product of two 2 × 2 matrices is given by
.
Also, note that raising any 2 × 2 matrix to the 0th power gives the identity matrix:
.
#include <iostream>#include <cmath>#include <cstring>#include <cstdio>#include <algorithm>#define maxn 1000#define kuma 10#define mod 10000using namespace std;struct matrix{ int a[kuma][kuma]; void init() { memset(a,0,sizeof(a)); for(int i=0;i<kuma;i++) { a[i][i]=1; } }};matrix mul(matrix x,matrix y){ matrix ans; for(int i=0;i<kuma;i++) { for(int j=0;j<kuma;j++) { ans.a[i][j]=0; for(int k=0;k<kuma;k++) { ans.a[i][j]=(ans.a[i][j]+((x.a[i][k]%mod)*(y.a[k][j]%mod))%mod)%mod; } } } return ans;}matrix add(matrix x,matrix y){ matrix ans; for(int i=0;i<kuma;i++) { for(int j=0;j<kuma;j++) { ans.a[i][j]=(x.a[i][j]%mod+y.a[i][j]%mod)%mod; } } return ans;}matrix quickpow(matrix a,int p){ matrix ans; ans.init(); matrix t; t=a; while(p) { if(p&1)ans=mul(ans,t); p>>=1; t=mul(t,t); } return ans;}int main(){ matrix nico; nico.init(); nico.a[0][0]=1; nico.a[1][0]=1; nico.a[0][1]=1; nico.a[0][0]=0; int n; while(scanf("%d",&n)==1) { if(n==-1)break; if(n==0){printf("0\n");continue;} if(n==1||n==2){printf("1\n");continue;} matrix ans=quickpow(nico,n-2); printf("%d\n",(ans.a[1][0]%mod+ans.a[1][1]%mod)%mod); } return 0;}
- Fibonacci(矩阵快速幂模板)
- 【矩阵快速幂】Fibonacci
- Fibonacci 矩阵快速幂
- Fibonacci 矩阵快速幂
- Fibonacci (矩阵快速幂)
- Fibonacci 快速幂矩阵
- POJ 3070 Fibonacci(矩阵快速幂模板)
- poj 3070 Fibonacci 矩阵快速幂 模板题
- nyoj fibonacci数列(二) 148 (矩阵快速幂模板)
- poj 3070 <矩阵快速幂【模板】求Fibonacci数列>
- poj 3070 Fibonacci(矩阵快速幂模板题)
- poj3070 Fibonacci 矩阵快速幂
- 3070Fibonacci{矩阵快速幂}
- poj3070 Fibonacci 矩阵快速幂
- POJ - Fibonacci 【快速幂 + 矩阵】
- 矩阵快速幂求Fibonacci
- POJ3070 - Fibonacci - 矩阵快速幂
- UVA10229Modular Fibonacci(矩阵快速幂)
- win10 + vs2013 +caffe 简易CPUonly安装步骤
- Common lisp编译成C可执行文件
- IDEA开发spring mvc 报404错误
- java se1.7 try-with-resources 使用
- C语言(常量与变量)
- Fibonacci(矩阵快速幂模板)
- maven build后Downloading maven-metadata.xml 的解决方法
- unity3D 制作3D塔防游戏(二) 制作敌人行走路径 无限循环
- 接口 修饰符 继承 变量命名规范
- UESTC 1051 Eggs broken【思维+期望Dp】
- TCP / Http区别
- RecycleView的监听事件
- js常用函数
- Java流(IO流)