POJ 3070 Fibonacci(简单矩阵快速幂)
来源:互联网 发布:linux 批量删除文件夹 编辑:程序博客网 时间:2024/06/15 00:55
题目链接:可以看原题目http://poj.org/problem?id=3070
Fibonacci
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 12736 Accepted: 9063
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
.
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:
.
Source
很水很水的一道题目,直接敲出来就好了。
下面是AC代码:
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;struct Mat{ int a[2][2]; void init() { memset(a,0,sizeof(a)); a[0][0]=1; a[1][1]=1; }};Mat mul(Mat a,Mat b){ Mat ans; ans.init(); for(int i=0;i<2;i++) { for(int j=0;j<2;j++) { ans.a[i][j]=0; for(int k=0;k<2;k++) { ans.a[i][j]+=a.a[i][k]*b.a[k][j]; } ans.a[i][j]%=10000; } } return ans;}Mat power(Mat a,int num){ Mat ans; ans.init(); while(num) { if(num&1) { ans=mul(ans,a); } num/=2; a=mul(a,a); } return ans;}int main(){ int n; while(~scanf("%d",&n)) { if(n==-1) { break; } if(n==0) { printf("0\n"); continue; } Mat a,ans; a.a[0][0]=1,a.a[0][1]=1,a.a[1][0]=1,a.a[1][1]=0; ans=power(a,n); printf("%d\n",ans.a[1][0]%10000); }}
- POJ 3070 Fibonacci(简单矩阵快速幂)
- poj - 3070 - Fibonacci(矩阵快速幂)
- poj 3070 Fibonacci(矩阵快速幂)
- poj 3070 Fibonacci(矩阵快速幂)
- POJ 3070 Fibonacci(矩阵快速幂)
- 【POJ】3070Fibonacci(矩阵快速幂)
- POJ 3070 Fibonacci(矩阵快速幂)
- POJ 3070 Fibonacci(矩阵快速幂)
- 【POJ 3070】Fibonacci(矩阵快速幂)
- POJ 3070 Fibonacci(矩阵快速幂)
- 【POJ 3070】Fibonacci(矩阵快速幂)
- POJ - 3070 - Fibonacci (矩阵快速幂)
- POJ-3070Fibonacci(矩阵快速幂)
- 【POJ】3070 - Fibonacci(矩阵快速幂)
- POJ 3070 Fibonacci(矩阵快速幂)
- Poj 3070 Fibonacci (矩阵快速幂)
- [POJ 3070] Fibonacci (矩阵快速幂)
- poj 3070 Fibonacci(矩阵快速幂)
- Virtex-6 Clock 资源
- JavaBean及其使用
- AbstractSequentialList抽象类源码解析
- SI与EMI(一)
- HDU5676(DFS打表+二分查找)
- POJ 3070 Fibonacci(简单矩阵快速幂)
- python列表VS字典
- 在JSP中使用JavaBean
- Android中使用Stack对Activity的管理
- 手持两把锟斤拷,口中疾呼烫烫烫。脚踏千朵屯屯屯,笑看万物锘锘锘
- M3&STM32零散知识学习
- LinkedList源码解析
- [SCOI2016][JZOJ4631]背单词
- Installing (安装) Octave For Mac