矩陣加速遞推(XDU 斐波那契數列為列)

2021-07-02 06:34:47 字數 823 閱讀 7340

這是xdu校網路塞的一道題目,斐波那契數列。。。看到給出的資料那麼大,心想,既然給出了mod,說不定有乙個迴圈節呢,可是直到n達到10^6都還沒有出現迴圈節,只有放棄了,然後覺得可以解線性遞推式的特徵根來求解,簡單化了幾下,感覺不妥,然後放棄了。後來白神說,這題可以用矩陣加速,感謝白神又讓我a了一題。啥?什麼叫矩陣加速呢?請戳這裡:

演算法學習筆記 遞迴之 快速冪、斐波那契矩陣加速

原來,線性遞推式可以換成矩陣相乘的形式,然後得到乙個關於乙個常矩陣的冪的形式。之後就得用類似於快速冪的思想解題了(看過,但沒寫過,感覺沒啥大的用處,真是。。。)。

對於此題:我們可以得到乙個矩陣遞推式,常量矩陣見**(不好打)。

**:#include#include#include#define ll long long

#define mod 1000000007

using namespace std;

int n;

ll a[2][2]=;//上面所說的常矩陣

void cal_2(ll a[2][2],ll b[2][2],ll c[2][2])

}void cal_1(ll a[2][2],int n)

ll t[2][2];

cal_1(t,n/2);//遞迴處理

cal_2(t,t,a);//計算連個矩陣的乘積

if(n&1) cal_2(a,a,t),memcpy(a,t,sizeof(t));//讓我對快速冪取模的理解又加深了一點

}int main(){

while(scanf("%d",&n)==1){

ll ans[2][2];

if(n<2){cout<

斐波那契數列(矩陣加速遞推)

f 1 1 f 2 1 f n f n 1 f n 2 n 2 且 n 為整數 請你求出 f n mod 1000000007 的值。輸入格式 第 1 行 乙個整數 n 輸出格式 第 1 行 f n mod 1000000007 的值 n 1e18 我們已經知道遞推公式了,但有個問題,就是n太大 怎...

矩陣 斐波那契數列

利用矩陣來求解斐波那契數列的有關問題是acm題中乙個比較常見的題型。例 nyoj 148 斐波那契數列2 有關斐波那契樹列的規律詳見這裡。1 對於n 1,都有f n 與f n 1 互質。2 f n f i f n i 1 f i 1 f n i 現在說說怎麼利用矩陣來求解斐波那契數列。我們可以先儲存...

模板 矩陣加速(數列)(矩陣加速遞推)

a 1 a 2 a 3 1 a x a x 3 a x 1 x 3 求a數列的第n項對1000000007 10 9 7 取餘的值。輸入格式 第一行乙個整數t,表示詢問個數。以下t行,每行乙個正整數n。輸出格式 每行輸出乙個非負整數表示答案。矩陣加速裸題 和我的前一篇基本一模一樣 只不過改變了要乘的...