51nod 1242 斐波那契数列的第N项
2016-11-03 20:57
351 查看
#include <bits/stdc++.h> using namespace std; const int siz=2; long long mod=1000000009; struct mtx { long long a[siz][siz]; }unit; mtx multi(mtx m1,mtx m2) { int i,j,k; mtx ret; memset(ret.a,0,sizeof(ret.a)); for(i=0;i<siz;i++) for(j=0;j<siz;j++) for(k=0;k<siz;k++) ret.a[i][j]=(ret.a[i][j]+m1.a[i][k]*m2.a[k][j])%mod; return ret; } mtx pow(mtx m,long long p) { mtx ret; memset(ret.a,0,sizeof(ret.a)); for(int i=0;i<siz;i++) ret.a[i][i]=1; while(p) { if(p&1) ret=multi(ret,m); m=multi(m,m); p>>=1; } return ret; } long long fib(long long x) { if(x==0) return 0; if(x==1) return 1; mtx ret; ret.a[0][0]=0;ret.a[0][1]=0; ret.a[1][0]=1;ret.a[1][1]=0; ret=multi(pow(unit,x),ret); return ret.a[0][0]; } int main() { long long n; unit.a[0][0]=0;unit.a[0][1]=1; unit.a[1][0]=1;unit.a[1][1]=1; while(cin>>n) { cout<<fib(n)<<endl; } }
相关文章推荐
- 51Nod 1242 斐波那契数列的第N项
- 51Nod 1242 斐波那契数列的第N项(矩阵快速幂)
- 51nod 1242 斐波那契数列的第N项 (矩阵快速幂)
- 51nod 1242 斐波那契数列第n项
- 51nod 1242 斐波那契数列的第N项
- 51nod 1242 斐波那契数列的第N项【矩阵快速幂】
- 51nod 1242 斐波那契数列的第N项(矩阵快速幂)
- 【51Nod】1242 斐波那契数列的第N项
- 【51Nod】1242 - 斐波那契数列的第N项(矩阵快速幂)
- 51nod 1242 斐波那契数列第N项
- 51nod 1242 斐波那契数列的第N项
- [51NOD]-1242 斐波那契数列的第N项 [矩阵快速幂]
- 51nod 1242 斐波那契数列的第N项
- 51nod 1242 斐波那契数列的第N项(矩阵幂运算)
- 51Nod-1242-斐波那契数列的第N项
- 51Nod 1242 斐波那契数列的第N项
- 51nod 1242 斐波那契数列的第N项(矩阵幂运算)
- 51nod_1242 斐波那契数列的第N项
- 51Nod - 1242 斐波那契数列的第N项 矩阵快速幂
- 51nod 1242 斐波那契数列的第N项(O(logn)求递推式)