矩陣快速冪 斐波那契數列

2021-08-28 10:38:33 字數 1080 閱讀 3094

time limit: 1000 ms   memory limit: 128 mb

通過小l的不懈努力,他即將成為大神啦,他登上了大神專屬的頒獎臺。在頒獎台上,他即將領取代表著大神的無限榮譽的勳章。小l走上頒獎台後,在台上發現了乙個製作精美的盒子。榮譽勳章就在盒子裡面。小l發現這個盒子被上了鎖,在這個盒子上有一套題,他知道想要拿到榮譽勳章,就必須完成這道題。小l開始研究起這道題。

第一行讀入兩個正整數n,k,表示該題為f(n)=f(n-1)+f(n-2)+…+f(n-k),求f(n)的值。f(1)=f(2)=...=f(k-1)=f(k)=1。

輸出乙個正整數,表示f(n)%1000000007的值。

5 2
5

資料範圍

對於30%的資料,有0<n≤100000,1<k≤50;

對於100%的資料,有0<n≤1015,1<k≤50。

非常經典的矩陣快速冪的題目

我們可以發現就只要兩個元素及可建立矩陣方程

及f(i+1)      x       1 1        =        f(i+2)

f(i)                    1 0                   f(i+1)

下面是codeeeeeeeeeeeeeeeeeeeee(不解釋)

#include#include#include#include#define tt 1000000007

#define ll long long

using namespace std;

ll f[4][4],ff[4][4];

ll t,n;

void mlti(ll a[4][4],ll b[4][4],ll ans[4][4])

for(int i=1;i<=3;i++)

for(int j=1;j<=3;j++)

ans[i][j]=temp[i][j];

}int main()

cout<<(f[1][1])%tt<}

return 0;

}

矩陣快速冪 斐波那契數列

先來實現乙個矩陣相乘的函式吧。const int mod 10000 struct mat mat mat mul mat x,mat y 實現兩個矩陣相乘,返回的還是乙個矩陣。return res 其實和普通快速冪類似,只不過這裡需要得到的是乙個矩陣下面來實現乙個矩陣快速冪 int pow int...

斐波那契數列 矩陣快速冪

輸入格式 輸入乙個正整數n 1 n 1e18 輸出格式 輸出乙個數,數列的第n項 輸入樣例1 1輸出樣例1 1輸入樣例2 3輸出樣例2 2 一 矩陣相乘 若a為n k矩陣,b為k m矩陣,則它們的乘積將是乙個n m矩陣。兩個矩陣能相乘的前提條件為前乙個矩陣的列數等於後乙個矩陣的行數。兩矩陣相乘的 如...

矩陣快速冪求斐波那契數列

求數a aa的n nn次冪,可以採用二分法進行快速計算,即 a n a cdot a n為偶數 a cdot a cdot a n為奇數 end right.an a n a a a cdot a cdot a cdot a cdots a a cdot a cdot a cdot a 2 cdot...