矩阵快速幂求斐波那契数列
2017-08-31 15:43
253 查看
#include <iostream> #include <vector> #include <algorithm> #include <cstdio> using namespace std; typedef long long LL; const int MAXN=1e4+5; const int MOD=1e9+7; typedef vector<int> vec; typedef vector<vec> mat; LL n; mat mul(mat &A,mat &B) { mat C(A.size(),vec(B[0].size())); for(int i=0;i<A.size();i++){ for(int k=0;k<B.size();k++){ for(int j=0;j<B[0].size();j++){ C[i][j]=(C[i][j]+A[i][k]*B[k][j])%MOD; } } } return C; } mat pow(mat A,LL n) { mat B(A.size(),vec(A.size())); for(int i=0;i<A.size();i++) B[i][i]=1; while(n>0) { if(n&1) B=mul(B,A); A=mul(A,A); n>>=1; } return B; } void solve() { mat A(2,vec(2)); A[0][0]=1;A[0][1]=1; A[1][0]=1;A[1][1]=0; A=pow(A,n); printf("%d\n",A[1][0]); } int main() { while(scanf("%lld",&n)!=EOF) { solve(); } return 0; }
相关文章推荐
- E - M斐波那契数列 (费马小定理 + 二分快速幂 + 矩阵快速幂)
- hdu-4549 M斐波那契数列【矩阵快速幂】
- 利用矩阵快速幂求解斐波那契数列
- 斐波那契数列 (矩阵快速幂)
- HDU 4549M斐波那契数列(矩阵快速幂+费马小定理)
- HDOJ 4549 M斐波那契数列 矩阵快速幂+欧拉降幂公式
- HDU 4549 M斐波那契数列【矩阵快速幂】
- 1242 斐波那契数列的第N项 运用矩阵快速幂来求解斐波那契数列问题
- 快速求斐波那契数列(矩阵乘法+快速幂)
- 矩阵快速幂,求斐波那契数列
- HDU 4549 M斐波那契数列(矩阵快速幂&费马小定理)
- hdoj 4549 M斐波那契数列(费马小定理降幂,矩阵快速幂)
- 矩阵快速幂斐波那契数列
- nod51-1242斐波那契数列-矩阵快速幂
- 斐波那契数列 (矩阵快速幂)
- POJ - 3070 - Fibonacci (矩阵快速幂 + 斐波那契数列)
- [51NOD]-1242 斐波那契数列的第N项 [矩阵快速幂]
- 【矩阵快速幂】 hdu5667 Sequence 、nyoj1000 又见斐波那契数列
- M斐波那契数列(矩阵快速幂+费马小定理)
- POJ 3070 (矩阵快速幂 ——斐波那契数列)