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:
36810
輸出樣例#1:
4919
對於30%的資料 n<=100;
對於60%的資料 n<=2*10^7;
對於100%的資料 t<=100,n<=2*10^9;
#include#include#include
#include
using
namespace
std;
typedef
long
long
ll;const
int mod=1e9+7
;inline ll read()
while(ch>='
0'&&ch<='9')
return x*f;
}struct
mata,b;
inline mat matmul(mat x,mat y)
returnt;}
inline mat matpow(mat x,
intp)
return
res;
}int
main()
mat tmp=matpow(a,n-3-1
); tmp=matmul(tmp,b);
printf(
"%lld\n
",tmp.m[1][1
]); }
return0;
}
洛谷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 模板 矩陣加速(數列)
傳送門 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 ...
洛谷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...