矩陣快速冪優化菲波那切數列

2022-04-10 06:15:32 字數 911 閱讀 8262

普通的斐波那契數列的遞推式很簡單,但是如果要求第1014個斐波那契數的話,肯定會tle,這時就可以用矩陣快速冪來優化。

菲波那切數列普通的遞推式是

f[i]=f[i-1]+f[i-2]

而矩陣乘法的規則是,講n行m列的矩陣與k行n列的矩陣相乘,所得矩陣的第i行第j列的數是由第乙個矩陣的第i列的每個數與第二個矩陣的第j行的每個數分別相乘,然後相加所得。

然後我們考慮上面的遞推式,可以看做是

f[i]=f[i-1]*1+f[i-2]*1   f[i-1]=f[i-1]*1+f[i-2]*0

講這些都看作是矩陣的話,那麼

然後求第n個斐波那契數就是求

然後利用矩陣快速冪就可以了

例題codevs1732

**:

1 #include2 #include3 #include4

using

namespace

std;

5 typedef long

long

ll;6

const ll mod=1000000007; 7

struct

node

8aa;

11 node mul(node &x,node &y)

1221

return

c;22}23

void

quick(ll n)

2436

//printf("%d %d\n%d %d\n",aa.a[1][1],aa.a[1][2],aa.a[2][1],aa.a[2][2]);

37 cout<1][1]<

;38return;39

}40intmain()

41

菲波那切數列

防止明天沒有時間或者忘了寫,今天先寫下吧。如果一對兔子每月生一對兔子 一對新生兔,從第二個月起就開始生兔子 假定每對兔子都是一雌一雄,試問一對兔子,一年能繁殖成多少對兔子?首先這個題目的設定是原來的一對兔子在一開始是新生的兔子,這樣這對兔子在第二個月才能生下一對新的兔子 也就是第三個月開始,第二個月...

菲波那切數列

現在已知fibonacci 菲波那切 數列的前幾項0 1 1 2 3 5 8 程式設計求出第 n 項。輸入一行,包含乙個正整數n 1 n 50輸出乙個整數。有兩種實現方式 1.遞迴實現 include include using namespace std long long f int n int...

菲波那切數列

題目描述 大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0 n 39 時間限制 c c 1秒,其他語言2秒 空間限制 c c 32m,其他語言64m 熱度指數 808696 class solution def fibonacci self,n wr...