Luogu P4732 常係數齊次線性遞推

2022-09-09 05:03:13 字數 784 閱讀 2124

求乙個滿足 \(k\) 階齊次線性遞推數列 \(\) 的第 \(n\) 項,即:

\[a_n=\sum\limits_^f_i \times a_

\]\(\mathttn=10^9,k = 32000\)

多項式取模。

關於求線性遞推數列的解法bjpers2大佬的題解已經說的很清楚了,這裡主要寫一下在打**的時候需要注意的地方。

我們其實就是要求多項式 \(x^n\) 在 \(p(x)= x^k-f_1x^-\cdots -f_kx^0\) 的模意義下的結果。

所以可以考慮快速冪,每次多項式取模就可以了,然後要注意以下兩個點:

對於多項式封裝使用std::vector的同學,需要注意模的多項式的size大於原多項式的情況。

原式有小於 \(0\) 的情況,需要判斷掉。

把**放一下吧:

inline std::pair,vector> div(vector f,vector g) 

inline int lr(vectora,vectorp,int n)

f = f * f ;

auto temp = div(f,p) ;

f = temp.second,n >>= 1;

}int ans = 0 ;

for (int i = 0; i < k; ++i) ans = (ans + 1ll * a[i] * res[i] % mod) % mod ;

return ans ;

}

常係數齊次線性遞推

給定遞推式 f n a 1f a 2 f a k f 給定 f 0,f 1.f k 求 f n 先定義 f n 的特徵方程 c x x a 1 x a 2 x a x a k 由基本代數定理,c x 0 的解 稱為特徵根 有 k 個,設為 alpha 1 alpha 2.alpha k 有 f n ...

常係數齊次線性遞推

見洛谷模板題。有個數列 給出前 k 項,即 a 0,a 1,dots,a 對於後面的所有 a n 有 a n sum f ia f 給出。小學生 直接幹。初中生 矩陣乘法。現在設 a 為轉移矩陣。列向量 vec v a a dots,a 0 滿足 a vec v a a dots,a 1 我們要求 ...

模板 常係數齊次線性遞推

題目傳送門 給出 k,a f 存在 forall n k wedge n in mathbb,exists a n sum f ka 給出 n 求出 a n n le 10 9,k le 32000 以下部分借鑑了 bjpers2 的題解 恭喜您!您獲得了 theta k 3 log n 的時間複雜...