线性递推
给出长为 m m 的数列
,以及无穷数列 f f 的前 m m 项
,对于 ∀i≥m ∀ i ≥ m ,有 fi=∑mj=1ajfi−j f i = ∑ j = 1 m a j f i − j 。求 fn f n
n≤1018,m≤30000 n ≤ 10 18 , m ≤ 30000
不同复杂度的做法
- 暴力 O(mn) O ( m n )
- 矩阵快速幂 O(m3logn) O ( m 3 log n )
- 暴力多项式快速幂 O(m2logn) O ( m 2 log n )
- 用 nlog n log 的多项式取模写快速幂 O(mlogmlogn) O ( m log m log n )
前两种暴力就不讲了,这里主要讲一下对“多项式取模为什么可以解线性递推”的理解。
线性递推与多项式取模
这篇博客写得不错,可以参考一下。
这里讲一种不用矩阵来理解的方法。我们直接从计算数列