斐波那契数列的矩阵解法(C)

#include <stdio.h>

#define MOD 1000000007

typedef struct {
    long long a;
    long long b;
    long long c;
    long long d;
} Matrix;


Matrix multiply(Matrix m1, Matrix m2) {
    Matrix result;
    result.a = (m1.a * m2.a + m1.b * m2.c) % MOD;
    result.b = (m1.a * m2.b + m1.b * m2.d) % MOD;
    result.c = (m1.c * m2.a + m1.d * m2.c) % MOD;
    result.d = (m1.c * m2.b + m1.d * m2.d) % MOD;
    return result;
}


Matrix matrixPower(Matrix base, int n) {
    Matrix result = { 1, 0, 0, 1 }; 
    while (n > 0) {
        if (n % 2 == 1) {
            result = multiply(result, base);
        }
        base = multiply(base, base);
        n /= 2;
    }
    return result;
}

long long fibonacci(int n) {
    if (n <= 1) {
        return n;
    }
    Matrix base = { 1, 1, 1, 0 };
    Matrix result = matrixPower(base, n - 1);
    return result.a; 
}

int main() {
    int n;
    
    scanf("%d", &n);
    printf("%lld\n", fibonacci(n));
    return 0;
}

}

全部评论

相关推荐

2024-12-26 20:46
复旦大学 C++
国棉17厂丶小王:拿了offer的那个周末晚上去网吧通宵,去网吧不知道玩什么刷了lc的每日一题,然后试着第一次打开了三角洲行动,从此少了一个已经刷了700道题的lc用户,但是烽火地带多了一只🐭🐭
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务