nyoj--148 fibonacci数列(二)(矩阵快速幂)

来源:互联网 发布:win7一拖二软件 编辑:程序博客网 时间:2024/04/26 01:03

nyoj 148
模板记录之。

#include <iostream>#include <fstream>#include <cmath>#include <vector>#include <algorithm>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 < (int)A.size(); ++i)        for(int k = 0; k < (int)B.size(); ++k)            for(int j = 0; j < (int)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 < (int)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(int n){    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);    cout << A[1][0] << endl;}int main(){    #ifdef LOCAL    fstream cin("data.in");    #endif    int n;    while(cin >> n && n != -1)    {        solve(n);    }    return 0;}
0 0
原创粉丝点击