poj 3070 Fibonacci(简单矩阵连乘)
2015-08-14 12:25
435 查看
题目:http://poj.org/problem?id=3070
Fibonacci
Description
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
![](http://poj.org/images/3070_1.png)
.
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
Sample Output
Hint
As a reminder, matrix multiplication is associative, and the product of two 2 × 2 matrices is given by
![](http://poj.org/images/3070_2.png)
.
Also, note that raising any 2 × 2 matrix to the 0th power gives the identity matrix:
![](http://poj.org/images/3070_3.gif)
题意如上,没有什么陷阱,简单的矩阵连乘取模。
Fibonacci
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 10994 | Accepted: 7823 |
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
![](http://poj.org/images/3070_1.png)
.
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
![](http://poj.org/images/3070_2.png)
.
Also, note that raising any 2 × 2 matrix to the 0th power gives the identity matrix:
![](http://poj.org/images/3070_3.gif)
题意如上,没有什么陷阱,简单的矩阵连乘取模。
#include <iostream> #include <cstdio> using namespace std; const int mod=1e4; struct matrie{ int m[2][2]; }; matrie A={ 1,1, 1,0 }; matrie I={ 1,0, 0,1 }; matrie multi(matrie a,matrie b){ matrie c; for(int i=0;i<2;i++){ for(int j=0;j<2;j++){ c.m[i][j]=0; for(int k=0;k<2;k++){ c.m[i][j]+=(a.m[i][k]*b.m[k][j])%mod; } c.m[i][j]%=mod; } } return c; } matrie power(int n){ matrie ans=I,tmp=A; while(n){ if(n&1)ans=multi(ans,tmp); tmp=multi(tmp,tmp); n>>=1; } return ans; } int main() { int n; while(cin>>n&&n!=-1){ matrie q=power(n); printf("%d\n",q.m[1][0]); } return 0; }
相关文章推荐
- java反射机制
- LeetCode Factorial Trailing Zeroes
- 1070. Mooncake (25)
- LeetCode Factorial Trailing Zeroes
- The Auth System 认证系统
- 零基础学python-2.21 回到我们的游戏 加入类和函数
- FIneCMS /dayrui/libraries/Chart/ofc_upload_image.php Arbitrary File Upload Vul
- HDU 2647 Reward(toposort)
- 零基础学python-2.21 回到我们的游戏 加入类和函数
- Linux设备树
- 相对定位与绝对定位
- 在xcode5中修改整个项目名
- 从零认识tomcat,构建一机多实例tomcat集群(转)
- 【UVa 156】Ananagrams
- 设计模式11: Flyweight 享元模式(结构型模式)
- HDFS API入门
- leetcode 题解代码整理 21-25题
- Android Hook神器——XPosed入门(登陆劫持演示)
- OC: 数组、集合、字典
- 好吧,之前写的博客都没了