EOJ 1499 矩阵快速幂求斐波那契数列
2018-01-10 20:11
197 查看
题目简介
给定n,求斐波那契数列前n项和。0 < n < 1e9
说明
快速幂实现方式和整数差不多,没什么好讲的。而对于斐波那契数列,不难发现:(Fn+2Fn+1)=(1110)(Fn+1Fn)(1)(1)(Fn+2Fn+1)=(1110)(Fn+1Fn)
我们记(1110)(1110)为A,由此我们可以推得:
(Fn+1Fn)=An(10)(2)(2)(Fn+1Fn)=An(10)
于是对A^n求解就很容易得到答案了。
#include <iostream> #define MOD 100000000 using namespace std; typedef long long ll; struct Mat{ ll m[2][2]; }; Mat MatMul(Mat A, Mat B) { Mat ret; for (int i = 0; i < 2; ++i) for (int j = 0 ; j < 2; ++j){ ret.m[i][j] = 0; for (int k = 0; k < 2; ++k) ret.m[i][j] += A.m[i][k] * B.m[k][j] % MOD; } return ret; } Mat MatPow(Mat A, ll n) { Mat ret; ret.m[0][0]=1; ret.m[0][1]=0; ret.m[1][0]=0; ret.m[1][1]=1; while (n){ if (n & 1) ret = MatMul(ret, A); A = MatMul(A, A); n >>= 1; } return ret; } int main() { ll n; while(cin >> n){ Mat ans, A; ans.m[0][0]=1; ans.m[0][1]=0; A.m[0][0]=1; A.m[0][1]=1; A.m[1][0]=1; A.m[1][1]=0; ans = MatMul(ans, MatPow(A, n + 1)); cout << ans.m[0][0] - 1 << endl; } return 0; }
相关文章推荐
- EOJ1499 矩阵快速幂
- hdu4549 M斐波那契数列 矩阵快速幂+快速幂
- 矩阵乘法 与 矩阵快速幂详解 以51NOD1242 斐波那契数列的第N项为例
- HDOJ 4549 M斐波那契数列(矩阵快速幂 + 费马小定理)
- 矩阵快速幂优化递推式 例:斐波那契数列
- HDOJ 4549 M斐波那契数列 矩阵快速幂+欧拉降幂公式
- 斐波那契数列 矩阵求法 优化,解析矩阵快速幂
- 51nod 1242 斐波那契数列的第N项(矩阵快速幂)
- POJ - 3070 - Fibonacci (矩阵快速幂 + 斐波那契数列)
- 【51Nod】1242 - 斐波那契数列的第N项(矩阵快速幂)
- 利用矩阵快速幂求斐波那契数列
- 2017 ACM/ICPC Asia Regional Shenyang Online E题【number number number】--矩阵快速幂与斐波那契数列
- HDU 4549 M斐波那契数列(矩阵快速幂+费马小定理)
- 矩阵乘法求斐波那契数列(快速幂)
- 矩阵快速幂斐波那契数列
- 51nod 1242 斐波那契数列的第N项 (矩阵快速幂)
- 矩阵快速幂求斐波那契数列 poj3070
- 【51NOD1242】斐波那契数列的第N项(矩阵快速幂)
- HDU - 4549 M斐波那契数列(矩阵快速幂+费马小定理)
- hdu 4549 M斐波那契数列(矩阵快速幂,快速幂降幂)