【C++】log(n)斐波那契数列计算 偏执的太偏执、 2022-11-02 15:26 228阅读 0赞 # 算法 # A n = \[ \[ 1 , 1 \] , \[ 1 , 0 \] \] n = \[ \[ F n + 1 , F n \] , \[ F n , F n − 1 \] \] n A\_n = \[\[1,1\],\[1,0\]\]^n = \[\[F\_\{n+1\}, F\_\{n\}\],\[F\_\{n\}, F\_\{n-1\}\]\] ^n An=\[\[1,1\],\[1,0\]\]n=\[\[Fn\+1,Fn\],\[Fn,Fn−1\]\]n 将Fn的累计计算方式转换为矩阵乘法的计算方式。 幂计算的方式由于,存在有logn算法,我在 [**整数幂计算方式logn**][logn] 中提到了,幂计算的logn算法。 **注意的是:** 由于矩阵乘法比对栈的压力比整数更大,其实一般不使用的递归的方式来求解。 只考虑循环的方式来做。 **关于越界:** * 考虑到数可能会很大,所以就用了一个mod的操作。 * 涉及到两个数的乘法,很可能出现两个没有越界的数的乘法直接越界,因此最好用long来避免这种情况。 class M{ long x11, x12, x21, x22; static const int mod = 1000000007; public: M(long x11_=0, long x12_=0, long x21_=0, long x22_=0): x11(x11_), x12(x12_), x21(x21_), x22(x22_){ } M operator*(const M& m){ M ans; ans.x11 = ((this->x11 * m.x11) % mod + (this->x12 * m.x21) % mod) % mod; ans.x12 = ((this->x11 * m.x12) % mod + (this->x12 * m.x22) % mod) % mod; ans.x21 = ((this->x21 * m.x11) % mod + (this->x22 * m.x21) % mod) % mod; ans.x22 = ((this->x21 * m.x12) % mod + (this->x22 * m.x22) % mod) % mod; return ans; } long getFn(){ return x12;} }; class Solution { public: M fib_m(int n){ M ans(1, 0, 0, 1); M tmp(1, 1, 1, 0); while (n!=0) { if (n & 1) ans = ans * tmp; tmp = tmp * tmp; n /= 2; } return ans; } int fib(int n) { M ans = fib_m(n); return ans.getFn(); } }; [logn]: https://blog.csdn.net/a19990412/article/details/101905912?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161423482316780357275270%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=161423482316780357275270&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-1-101905912.pc_v2_rank_blog_default&utm_term=%E5%B9%82
相关 斐波那契数列 斐波那契数,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波那契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2, Love The Way You Lie/ 2022年11月19日 04:15/ 0 赞/ 216 阅读
相关 斐波那契数列 斐波那契数列 描述 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子 £神魔★判官ぃ/ 2022年11月10日 10:54/ 0 赞/ 26 阅读
相关 斐波那契数列 \\题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 思路 1. 递归(函数栈调用消耗 ゝ一纸荒年。/ 2022年10月29日 06:26/ 0 赞/ 11 阅读
相关 斐波那契数列 // 斐波那契数列.cpp : 定义控制台应用程序的入口点。 // \include "stdafx.h" \include<iostream> usin 谁践踏了优雅/ 2022年08月23日 14:45/ 0 赞/ 45 阅读
相关 斐波那契数列 关于斐波那契数列的解法,本人找到了一种比较简单的方法,结果是正确的,不知道各位有没有另外更好的解法,一起探讨探讨。 import java.util.; pu ╰+攻爆jí腚メ/ 2022年08月01日 12:15/ 0 赞/ 322 阅读
相关 斐波那契数列 定义:斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … 这个数列从第三项开始,每一项都等于前两项之和。 矫情吗;*/ 2022年07月13日 04:49/ 0 赞/ 283 阅读
相关 斐波那契数列 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597, 冷不防/ 2022年07月13日 03:19/ 0 赞/ 308 阅读
相关 斐波那契数列 class FibIter(object): def __init__(self, lenth): self.lent 一时失言乱红尘/ 2022年05月27日 13:51/ 0 赞/ 307 阅读
相关 斐波那契数列 include<iostream> using namespace std; int fibonacci1(int t) { if(t 古城微笑少年丶/ 2022年05月09日 08:58/ 0 赞/ 271 阅读
相关 斐波那契数列 ![1234096-20171112230708606-1911525192.png][] 转载于:https://www.cnblogs.com/ostrich-sugar た 入场券/ 2022年01月06日 23:41/ 0 赞/ 323 阅读
还没有评论,来说两句吧...