题面:https://www.luogu.com.cn/problem/U703133
题目从何而来?
这堆破玩意的原题是这样的:
\(T\) 组数据,设斐波那契数列 \(\{F_n\}\),众所周知有个定理是 \(F_d|F_{nd}\),求 \(k\pmod m\) 使得 \(kF_d\equiv F_{nd}\pmod m\)。不保证 \(F_d\) 对 \(m\) 有逆元。
结论1:
可以用二元归纳法证明,至于怎么正着推我特么怎么知道。
拆一下:
以此类推
有点毒瘤啊
做法
所以这东西跟卷积毫无关系。
下面是我跟 gemini 老师学的,我只会推出来这个烂题但我不会做(
我们知道斐波那契递推矩阵是这样的:
则
那么
\(X_{0,0}\pmod m\)就是答案。
发挥极致的注意力:
则得到一个非常神奇的恒等式:
注意到 \((x^n+y^n)=(x-y)(\sum_{i=0}^{n-1}x^iy^{n-1-i})\),容易观察到与上面相像,代回 \(X\) 的定义式:
根据矩阵乘法规则,\((AX)_{1,0}=X_{0,0}\times A_{0,1}+X_{0,1}\times A_{1,1}=X_{0,0}\),又有\((A^n-F_{d-1}^nI)_{1,0}=A^n_{0,0}=F_{nd}\)。
这就推回来了:
不保证存在对 \(m\) 的逆元,那么这个怎么做呢?
结论2:
\(F_d\) 是常数,设 \(U_d=\frac{F_{nd}}{F_{d}}\),它也必然满足 \(U_{nd} = L_d U_{(n-1)d} - (-1)^d U_{(n-2)d}\)。
容易构造矩阵,注意在模 \(m\) 下 \(-(-1)^d\) 不能直接填进去,设 \(C=-(-1)^d\bmod m\):
两次矩阵快速幂,时间复杂度 \(O(T(\log n+\log d))\)。