zoukankan      html  css  js  c++  java
  • 【hiho一下】41 斐波那契数列【矩阵快速幂】

    计算 斐波那契数列 第n项 MOD 19999997的结果

    #include <iostream>
    using namespace std;
    
    /*2x2矩阵相乘与2x1矩阵相乘*/
    void mul(long long F[2][2], long long M[2][2]) {
    	long long lt, rt,
    		bl, br;
    	lt = F[0][0] * M[0][0] + F[0][1] * M[1][0], rt = F[0][0] * M[0][1] + F[0][1] * M[1][1];
    	bl = F[1][0] * M[0][0] + F[1][1] * M[1][0], br = F[1][0] * M[0][1] + F[1][1] * M[1][1];
    	lt = lt % 19999997;
    	rt = rt % 19999997;
    	bl = bl % 19999997;
    	br = br % 19999997;
    	F[0][0] = lt, F[0][1] = rt;
    	F[1][0] = bl, F[1][1] = br;
    }
    /*2x2矩阵求乘方*/
    void power2(long long F[2][2], long long n) {
    	if (n == 0 || n == 1) {
    		return;
    	}
    	long long M[2][2] = { { 1, 1 },{ 1, 0 } };
    	power2(F, n / 2);
    	mul(F, F);
    	if (n % 2 != 0) {
    		mul(F, M);
    	}
    }
    /*求斐波那契数列高效算法(O(log2n))*/
    /*当n较小时比int fibonacci(int n)慢,当n较大时明显快于其他算法*/
    long long fibnacci_3(long long n) {
    	long long F[2][2] = { { 1, 1 },{ 1, 0 } };
    	if (n == 0) {
    		return 0;
    	}
    	power2(F, n - 1);
    	return F[0][0];
    }
    
    int main() {
    	long long n;
    	cin >> n;
    	cout << fibnacci_3(n + 1) << endl;
    	return 0;
    }
    
  • 相关阅读:
    Hive
    Hadoop简介与分布式安装
    Hadoop分布式文件系统HDFS
    HDFS的操作SHELL和API
    HDFS高级功能
    Yarn
    Hadoop的I/O操作
    Hadoop的RPC工作原理
    Mapreduce入门和优化方案
    MapReduce的工作机制
  • 原文地址:https://www.cnblogs.com/shengwang/p/9748527.html
Copyright © 2011-2022 走看看