poj 3070 斐波那契数列
来源:互联网 发布:优化储存空间照片恢复 编辑:程序博客网 时间:2024/05/25 12:20
Description
In the Fibonacci integer sequence, F0 = 0, F1 = 1, andFn = Fn − 1 + Fn − 2 forn ≥ 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 ofFn are all zeros, print ‘0’; otherwise, omit any leading zeros (i.e., printFn mod 10000).
Sample Input
099999999991000000000-1
Sample Output
0346266875
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
矩阵的快速幂运算,函数无法返回二维数组就用结构体把它套起来,直接返回结构体。。
同时get了快速求斐波那契数列的新技能。
#include<map>#include<vector>#include<cstdio>#include<iostream>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<stack>#include<queue>#include<set>#define inf 0x3f3f3f3f#define mem(a,x) memset(a,x,sizeof(a))using namespace std;typedef long long ll;typedef pair<int,int> pii;inline int in(){ int res=0; char c; while((c=getchar())<'0' || c>'9'); while(c>='0' && c<='9')res=res*10+c-'0',c=getchar(); return res;}struct node{ int a[2][2]; node() { a[0][0]=1; a[0][1]=1; a[1][0]=1; a[1][1]=0; }};node mul(node a,node b){ node res; for(int i=0;i<2;i++) { for(int j=0;j<2;j++) { res.a[i][j]=0; for(int k=0;k<2;k++) { res.a[i][j]+=a.a[i][k]*b.a[k][j]%10000; } } } return res;}node pow(node a,int n){ node res; while(n) { if(n & 1)res=mul(res,a); a=mul(a,a); n>>=1; } return res;}int main(){ int n; while(~scanf("%d",&n)) { if(n==-1)break; if(n==0) { puts("0"); continue; } node a; node ans=pow(a,n-1); printf("%d\n",ans.a[1][0]%10000); } return 0;}
- poj 3070 斐波那契数列
- 百练POJ 2753斐波那契数列
- POJ 1953 World Cup Noise 斐波那契数列
- 斐波那契数列数列计算
- POJ - 3070 - Fibonacci (矩阵快速幂 + 斐波那契数列)
- poj 3070-Fibonacci (矩阵快速幂 求 斐波那契数列)
- poj-3070 Fibonacci(矩阵快速幂 + 斐波那契数列)
- POJ 3070 (矩阵快速幂 ——斐波那契数列)
- 矩阵快速幂优化递推式 例:斐波那契数列 poj 3070
- POJ 3070 斐波那契数列(矩阵快速幂(版题))
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- TCP/IP协议三次握手与四次握手流程解析
- NSRunLoop 概述和原理
- windbg
- shell中if条件字符串、数字比对,[[ ]]和[ ]区别
- Java文件拆分与合并
- poj 3070 斐波那契数列
- 几天做NOIP原题比赛下来的心得体会
- NSMutableArray等容器类的Copy注意事项
- jQuery 克隆对象
- HDOJ 1686 Oulipo(KMP)
- 【采集层】Kafka 与 Flume 如何选择
- Function插入HUB的过程
- Red and Black (BFS)
- Android 第三方应用广告拦截实现