傳送門
$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...