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