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*10^7;
對於100%的資料 t<=100,n<=2*10^9;
\(\displaystyle \beginl}}
\ 現在我需要求的矩陣是:\\
\begin
f[ i]\\
f[ i-1]\\
f[ i-2]
\end\\
根據題目中給出的條件:f[ x] =f[ x-1] +f[ x-3]\\
而我們下一步要求出f[ i+1]\\
所以f[ i+1] =f[ i] +f[ i-2]\\
所以求初始矩陣為\\
\begin
1 & 0 & 1\\
1 & 0 & 0\\
0 & 1 & 0
\end\\
對初始矩陣進行矩陣快速冪然後輸出a[ 1][ 1]
\end\)
#include #include #include #include #include #include #define re register
#define max 200000012
#define int long long
int n;
const int mod=1000000007;
struct mat
inline void build()
};mat operator*(mat &a,mat &b)
mat ans,a,a;
void quick_mat(int x)
}signed main()
a.a[1][1]=1;a.a[1][2]=0;a.a[1][3]=1;
a.a[2][1]=1;a.a[2][2]=0;a.a[2][3]=0;
a.a[3][1]=0;a.a[3][2]=1;a.a[3][3]=0;
quick_mat(x-3);
ans = ans * a;
printf("%lld\n",ans.a[1][1]);
} 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 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...