理论部分
二次剩余
在数论中,整数 $X$ 对整数 $p$ 的二次剩余是指 $X^2$ 除以 $p$ 的余数。
当存在某个 $X$,使得式子 $X^2 \equiv d(mod \ p)$ 成立时,称“ $d$ 是模 $p$ 的二次剩余”
当对任意 $X$,$X^2 \equiv d(mod \ p)$ 都不成立时,称“ $d$ 是模 $p$ 的二次非剩余”
矩阵的相似对角化
相似矩阵:对于矩阵 $A$ 和 $B$,若存在可逆矩阵 $P$,使得 $P^{-1}AP=B$,则称 $A$ 相似于 $B$,记作 $A\sim B$。
矩阵可对角化是指与对角矩阵相似,即 $P^{-1}AP = diag(\lambda _1, \lambda _2,...,\lambda _n)$
定理:$n$ 阶矩阵 $A$ 与对角矩阵相似的充要条件是 $A$ 有 $n$ 个线性无关的特征向量。简单的判断就是 $|A| \neq 0$.
分析
来源于 acdreamers 的广义Fibonacci数列找循环节,这里只是梳理一下。
将递推式表示成转移矩阵的形式,相当于只需找到转移矩阵的周期。
即求最小的 $n$,使得
$${\begin{bmatrix} a & b\\ 1 & 0 \end{bmatrix}}^n(mod \ p) = \begin{bmatrix} 1 & 0\\ 0 & 1 \end{bmatrix}$$
我们可以找到一个满足条件的 $n$,然后枚举其因子。
设 $A$ 相似于 $D$,$A$ 的特征根分别为 $\lambda _1,\lambda _2$.
则D为
$D = \begin{bmatrix} \lambda _1 & 0\\ 0 & \lambda _2 \end{bmatrix}$
因为 $A^n = T^{-1}D^nT$,所以 $D^n \equiv I(mod \ p)$ 时,$D^n \equiv I(mod \ p)$
由于$$D^n = {\begin{bmatrix} \lambda _1 & 0\\ 0 & \lambda _2 \end{bmatrix}}^n = D = \begin{bmatrix} \lambda _1^n & 0\\ 0 & \lambda _2^n \end{bmatrix}(mod \ p) = I$$
于是 $\lambda _1^n\equiv 1(mod \ p),\ \lambda _2^n\equiv 1(mod \ p)$.
如何找到 $n$ 呢?
直接上结论吧!(看不懂了555)
设 $\Delta = a^2+4b$
- 若 $\Delta$ 是 $p$ 的二次剩余,$n=p-1$
- 若 $\Delta$ 是 $p$ 的二次非剩余,$n=(p+1)(p-1)$
- 若 $\Delta=p$,则无法相似化。幸好题目不会出现这种情况
上述结论还是针对 $p$ 为素数,$p$ 为合数呢?
首先,质因数分解 $p=p_1^{a_1}p_2^{a_2}...p_k^{a_k}$,
设 $g(x)$ 为模 $x$ 时循环节长度,有结论 $g(p_i^{a_i}) = p_i^{a_1-1} g(p_i)$
所以
$$
\begin{aligned}
g(x) & =g(p_1^{a_1}p_2^{a_2}...p_k^{a_k})\\
&= p_1^{a_1-1} g(p_1) \cdot p_2^{a_2-1} g(p_2) ... p_k^{a_k-1} g(p_k)\\
&= (p / p_1p_2... p_k) g(p_1)g(p_2) ... g(p_k)
\end{aligned}$$
实现
二次剩余我又不会判断,直接当作 $(p+1)(p-1)$,大不了多个倍数。
按道理最小的循环节不是 $n$,而是 $n$ 的因数,感觉分解再判断挺麻烦的,不管了,大不了多个倍数。