POJ 3070 —— Fibonacci 【矩阵快速幂】
来源:互联网 发布:新手怎样做淘宝客 编辑:程序博客网 时间:2024/06/05 10:24
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
099999999991000000000-1
Sample Output
0346266875
#include <cstdio>#include <iostream>#include <vector>#include <assert.h>using namespace std;const int MOD = (int)1e4;struct Mat { vector<vector<int> > m; Mat() {} Mat(int a, int b) { m.resize(a); for(int i=0; i<m.size(); i++) { m[i].resize(b); } }};Mat operator * (const Mat& a, const Mat& b) { assert(a.m[0].size() == b.m.size()); Mat c(a.m.size(), b.m[0].size()); for(int i=0; i<a.m.size(); i++) { for(int j=0; j<b.m[0].size(); j++) { c.m[i][j] = 0; for(int k=0; k<b.m.size(); k++) { c.m[i][j] = (c.m[i][j] + a.m[i][k] * b.m[k][j] % MOD) % MOD; } } } return c;}Mat operator ^ (Mat a, int k) { assert(a.m.size() == a.m[0].size()); Mat c(a.m.size(), a.m.size()); for(int i=0; i<a.m.size(); i++) { for(int j=0; j<a.m.size(); j++) { c.m[i][j] = (i==j); } } while(k) { if(k&1) { c = c * a; } a = a * a; k>>=1; } return c;}int main (){ int n; Mat a(2,2), b(2,1); a.m[0][0]=a.m[1][0]=a.m[0][1]=1; a.m[1][1]=0; b.m[0][0]=1; b.m[1][0]=0; while(scanf("%d", &n) != EOF && n != -1) { if(n==0) printf("%d\n", b.m[1][0]); else if(n==1) printf("%d\n", b.m[0][0]); else { Mat ans = (a^(n-1)) * b; printf("%d\n", ans.m[0][0]); } } return 0;}
- POJ—3070—Fibonacci—【矩阵快速幂】
- POJ——3070Fibonacci(矩阵快速幂)
- POJ 3070 —— Fibonacci 【矩阵快速幂】
- 矩阵快速幂——Fibonacci ( POJ 3070 )
- POJ 3070 Fibonacci 矩阵快速幂
- poj - 3070 - Fibonacci(矩阵快速幂)
- 矩阵快速幂 Fibonacci 3070 poj
- POJ 3070 Fibonacci (矩阵快速幂)
- poj 3070 Fibonacci (矩阵快速幂)
- poj 3070 Fibonacci(矩阵快速幂)
- poj 3070 Fibonacci 矩阵快速幂
- POJ 3070 Fibonacci(矩阵快速幂)
- poj 3070 Fibonacci(矩阵快速幂)
- POJ-3070 Fibonacci 矩阵快速幂
- Fibonacci - POJ 3070 矩阵乘法快速幂
- poj 3070 Fibonacci(矩阵快速幂)
- poj 3070 Fibonacci 矩阵快速幂
- POJ 3070 Fibonacci(矩阵快速幂)
- HDU 2149 —— Public Sale
- 【小马迷途】—myeclipse快速开发技巧
- HDU 1850 —— Being a Good Boy in Spring Festival
- HDU 1847 ——Good Luck in CET-4 Everybody!
- HDU 1848 —— Fibonacci again and again 【博弈 sg函数】
- POJ 3070 —— Fibonacci 【矩阵快速幂】
- HDU 4734 —— F(x)
- 杭电1260
- HDU 3555 —— Bomb
- HDU 2089 —— 不要62
- CSS中的字体背景和盒子模型
- POJ 3252 —— Round Numbers
- HDU 3652 —— B-number
- poj3277 City Horizon(矩形面积并)