P7325 [WC2021] 斐波那契

P7325 [WC2021] 斐波那契

https://www.luogu.com.cn/problem/P7325

好题,每一步都在能力范围之外。

首先 \(F_n\) 写为 \(a\times fib_{n-1}+b\times fib_{n}\)。再令 \(b\leftarrow -b\),得到

\[a\times fib_{n-1}\equiv b\times fib_n \pmod{m} \]

\(fib_n\)\(\bmod m\) 意义下纯循环,循环节长为 \(O(m)\)。所以只有 \(O(m)\)\(fib_n\) 有用。

我们希望写成 \(\frac a b\equiv \frac{fib_n}{fib_{n-1}}\) 的形式,但可能没有逆元。

首先令 \(d=\gcd(a,b,m),a'=\frac a d,b'=\frac b d,m'=\frac m d\)

\[a'\times fib_{n-1}\equiv b'\times fib_n \pmod{m'} \]

此时 \(\gcd(a',b',m')=1\),但 \(\gcd(a',m'),\gcd(b',m')\) 不一定为 \(1\)

由辗转相除法,\(\gcd(a'\times fib_{n-1},m')=\gcd(b'\times fib_n,m')\)

\(z\mid \gcd(a',m')\)。此时 \(z\nmid \gcd(b',m')\),否则与 \(a',b',m'\) 互质矛盾。所以 \(z\mid \gcd(fib_n,m')\)

\(z\mid \gcd(fib_n,m')\)。由 \(fib_n \perp fib_{n-1}\)\(z\mid \gcd(a',m')\)

所以 \(\gcd(a',m')=\gcd(fib_n,m')=x\)。同理得到 \(\gcd(b',m')=\gcd(fib_{n-1},m')=y\)

所以

\[\frac{a'}{x}\times \frac{fib_{n-1}}{y}\equiv \frac{b'}{y} \times \frac{fib_n}{x} \pmod{\frac{m'}{xy}} \]

这样就有逆元了:

\[\frac{fib_{n}}{x}\times \left(\frac{fib_{n-1}}{y}\right)^{-1}\equiv \frac{a'}{x}\times \left(\frac{b'}{y}\right)^{-1} \pmod{\frac{m'}{xy}} \]

但我们不可能求出 \(fib_n\) 真正的值。但注意到 \(\gcd(fib_n,m')=\gcd(fib_n\bmod m',m')\),所以求出 \(fib_n \bmod m'\) 即可。

查询时,先求出 \(m'\),然后得到 \(x,y\),寻找 \(\gcd(fib_n,m')=x,\gcd(fib_{n-1},m')=y,\frac{fib_{n}}{x}\times (\frac{fib_{n-1}}{y})^{-1}\equiv \frac{a'}{x}\times (\frac{b'}{y})^{-1} \pmod{\frac{m'}{xy}}\) 的最小 \(n\)

所以需要枚举 \(m'\),将 \((x,y,\frac{fib_{n}}{x}\times(\frac{fib_{n-1}}{y})^{-1}\bmod \frac{m'}{xy})\) 塞进 map 或哈希表中,查表即可。

复杂度 \(O(\sigma(m)\log m)\)\(\sigma(m)\) 为因数和,为 \(O(m\log \log m)\) 量级。

特判 \(a=0\)\(b=0\)\(fib \bmod m'=0\)\(fib \bmod m'=0\) 的情况,此时没有逆元。

https://www.luogu.com.cn/record/198642410

posted @ 2026-01-09 08:45  XP3301_Pipi  阅读(2)  评论(0)    收藏  举报
Title