【poj3070】Fibonacci(矩阵)
来源:互联网 发布:三级数据库题型 编辑:程序博客网 时间:2024/06/13 21:44
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<cstdio>#include<algorithm>#include<cstring>using namespace std;struct Matrix{ long long a[5][5]; int h,w;}pr,ne;long long n;void init(){ pr.a[2][1]=pr.a[1][2]=0;//初始化单位矩阵(a[i][i]值为1,其他值为0) pr.a[1][1]=pr.a[2][2]=1;//任何矩阵乘以单位矩阵,其值不变 pr.h =2,pr.w =2; ne.a[1][1]=ne.a[1][2]=ne.a[2][1]=1; ne.a[2][2]=0;//初始化初始矩阵(用来进行n次幂的矩阵) ne.h =2,ne.w =2;}Matrix Matrix_multiply(Matrix x,Matrix y)//矩阵乘法 { Matrix t; memset(t.a,0,sizeof(t.a)); t.h =x.h ;//新矩阵的长宽 t.w =y.w ; for(int i=1;i<=x.h ;i++) { for(int j=1;j<=y.h;j++)//y.h==x.w { if(x.a[i][j]==0) continue; for(int l=1;l<=y.w ;l++) { t.a[i][l]=(t.a[i][l]+x.a[i][j]*y.a[j][l]%10000)%10000; } } } return t; } void Matrix_mod(int n){ while(n) { if(n&1) pr=Matrix_multiply(ne,pr); ne=Matrix_multiply(ne,ne); n>>=1; } /* 主要是初始矩阵的n次幂,若n为奇数,则n&1值为1, 就要pr自己算一次,若为偶数则pr就要进行n次幂了 */}int main(){ while(~scanf("%lld",&n)&&n!=-1) { init();//初始化 Matrix_mod(n); //快速幂 printf("%lld\n",pr.a[1][2]%10000); } return 0;}
- 【poj3070】Fibonacci(矩阵)
- POJ3070 Fibonacci (矩阵连乘)
- poj3070 Fibonacci(矩阵乘法初学)
- POJ3070 - Fibonacci (矩阵快速幂)
- poj3070 Fibonacci (矩阵快速幂)
- [POJ3070]Fibonacci(矩阵快速幂)
- poj3070 Fibonacci(矩阵快速幂)
- poj3070 Fibonacci(矩阵快速幂)
- poj3070 Fibonacci(矩阵倍增模板)
- 【poj3070】 Fibonacci 【矩阵乘法】
- poj3070 Fibonacci 矩阵快速幂
- poj3070 Fibonacci 矩阵快速幂
- POJ3070 - Fibonacci - 矩阵快速幂
- POJ3070 Fibonacci(矩阵快速幂)
- poj3070 Fibonacci(矩阵快速幂)
- poj3070 Fibonacci(矩阵快速幂)
- 【数论】【矩阵加速】[POJ3070]Fibonacci
- POJ3070--Fibonacci--矩阵快速幂
- 常见HTTP状态(304,200等)
- 如何有效提高asp页面的访问速度
- linux move 实现
- poj-1797-Heavy Transportation [最短路][Dijkstra]
- 接口和抽象类的区别
- 【poj3070】Fibonacci(矩阵)
- resolv.conf 三参数理解
- Asp防止网页频繁刷新和强制不缓存的方法
- 如何快速搭建一个微服务架构?
- volatile关键字解析
- web app 点击复制代码
- Excel 2016的逆天功能
- Maven常见错误
- Map的遍历(带泛型)