矩阵快速幂求斐波那契数列第n项

来源:互联网 发布:知豆电动汽车官网 编辑:程序博客网 时间:2024/05/17 07:42

求斐波那契数列第 n 项





#include<cstdio>#include<iostream>#include<vector>using namespace std;typedef vector<int> vec;typedef vector<vec> mat;const int mod = 10000;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, int 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;}int main(){int n;while(scanf("%d", &n) != EOF){mat A(2, vec(2));A[0][0] = A[0][1] = A[1][0] = 1;A[1][1] = 0;A = pow(A, n);printf("%d\n", A[1][0]);}return 0;}


阅读全文
0 0
原创粉丝点击