洛谷P1939 模板 矩陣加速(數列)

2022-08-20 23:45:19 字數 751 閱讀 8915

傳送門

$a_1=a_2=a_3=1$

$a_n=a_+a_\quad(n>3)$

有$t$組詢問。對每組詢問,給定$n$,求$a_n\mod 1000000007$。

$t\leq 100,n\leq 2\times 10^9$。

首先假定你會矩陣快速冪(不會的看:這裡)

那麼,我們可以構造列向量

$$c_=\begina_\\a_\\a_\end$$

,然後想辦法構造乙個$3x3$的矩陣$a$,使得

$$a\times c_=c_$$

顯然,$a$可以等於

$$\begin0&1&0\\0&0&1\\1&0&1\end$$

然後矩陣快速冪一波就可以在$\mathcal o(\lg n)$的時間內求出$a_$了。

貼**:

#include using namespace std;

typedef long long ll;

typedef array, 4> matrix;

const ll p = 1000000007;

ll n, k;

matrix a, i;

matrix matrixmul(const matrix &a, const matrix &b)

return ret;

}matrix powermod(ll k)

signed main()

} return 0;

}

洛谷P1939 模板 矩陣加速(數列)

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。輸出格式 每行輸出乙個非負整數表示答案。輸入樣例 1 368 10 輸出樣例 1 4 919 對於...

洛谷P1939 模板 矩陣加速(數列)

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。每行輸出乙個非負整數表示答案。36 81049 19對於30 的資料 n 100 對於60 的資料 n 2 ...

洛谷P1939 模板 矩陣加速(數列)

設f1 f2 f3 1 fn fn 3 fn 1f1 f2 f3 1,f n f n 3 fn 1 求fnfn 這篇部落格並不是專門來介紹矩陣乘法加速遞推的。但是既然是模板題就提一下吧。也就是說,對於兩個矩陣aa和b b,在滿足第乙個矩陣的列數 第二個矩陣的行數時,這兩個矩陣就可以相乘。那麼假設aa...