UOJ WHYZ P14 數列 遞推 矩陣快速冪

2021-08-19 08:43:46 字數 936 閱讀 7401

a[1]=a[2]=a[3]=1

a[x]=a[x−3]+a[x−1](x>3)求a

數列的第

n 項對

1000000007

取餘的值。

輸入描述 第一行乙個整數tt

,表示詢問個數。以下t

t行,每行乙個正整數nn

。每行輸出乙個非負整數表示答案。

368

10

4

919

n<=2*10^9

題目鏈結

這道題目可以說是矩陣快速冪中的模板題了。題目中先看到遞推式,再看資料範圍,很明顯告訴你不能在o(n)時間內完成。因此我們考慮矩陣快速冪的演算法。在這道題目中,我們至少只需要保留f[n-1]和f[n-3]兩個值就能推出f[n],但因為f[n+1]需要用到f[n-2]的值,所以我們在矩陣中也必須保留。這樣,我們便能推出解題的矩陣,,},再運用矩陣快速冪即可在logn時間內完成。

ac**:

#include

#include

#include

#define ll long

long

using

namespace std;

const

int mod=

1000000007

;structjz;

jzmult(jz

a,jzb)}

}return c;}jz

qpow(jz

m,int n)};

while

(n) n>>=1;

m=mult

(m,m);

}return mul;

}int

main

()return0;

}

矩陣優化遞推數列

求斐波那契數列第n項,輸出答案模10 9 7的值 n 2 63 對於學過線代的大佬請跳至solution 我們先介紹一下矩陣,我們表現形式就是二維陣列。而矩陣相對於二維陣列不同的是具有乘法運算。對於n m的矩陣a和m p的矩陣b,表示a b的矩陣c是n p的,其中矩陣c的第i行j列的元素滿足 舉個栗...

矩陣加速數列遞推

zoj problem set 3690 code include include using namespace std struct matrix matrix matrix operator const matrix t const undef mod undef maxn int main ...

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

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。輸出格式 每行輸出乙個非負整數表示答案。矩陣加速裸題 和我的前一篇基本一模一樣 只不過改變了要乘的...