zoukankan      html  css  js  c++  java
  • 矩阵快速幂 -- 斐波那契数列

    #include <bits/stdc++.h>
    using namespace std;
    
    const int mod = 1e9 + 7;
    int N;
    
    struct Matrix{
        long long m[2][2];
    };
    
    Matrix Mul(Matrix A, Matrix B) {
        Matrix 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;
    }
    
    Matrix Pow(Matrix A, long long N) {
        Matrix 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 = Mul(ret, A);
            A = Mul(A, A);
            N /= 2;
        }
        return ret;
    }
    
    int main() {
        scanf("%d", &N);
        Matrix 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 = Mul(ans, Pow(A, N - 1));
        printf("%lld
    ", ans.m[0][0]);
        return 0;
    }
    

      

  • 相关阅读:
    Python socket 基础(Server)
    Python socket 基础(Client)
    DOM
    Software Testing Concepts
    coroutine
    这一周~&&html+css的学习感悟
    充实的几天~
    时间不够用的感觉
    论文真痛苦
    焦躁的一周……
  • 原文地址:https://www.cnblogs.com/zlrrrr/p/9876611.html
Copyright © 2011-2022 走看看