版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
大家都知道, 斐波那契数列是满足如下性质的一个数列:
5
1000000007
5
10
1000000007
55
对于 $100\%$ 的数据, $n \leq 10^{30000000}, p<2^{31}$
科技题
先摆个论文: The Period of the Fibonacci Sequence Modulo j
这篇论文给出了找 Fibonacci 数列和 Lucas 数列循环节的方法 (实际上所有二阶递推数列都可以这样做)
简单来说就是这样:
考虑 $p$ 的唯一分解
$$ p=\prod_{i=1}^{\omega(p)}p_i^{\alpha_i} $$
令 $l(p)$ 为 $F_n$ 模 $p$ 的循环节, 则
$$ l(p)=\operatorname{lcm}{l(p_1^{\alpha_1}),l(p_2^{\alpha2}),...,l(p{\omega(p)}^{\alpha_{\omega(p)}})} $$
对素数 $p$, 有如下定理:
代码里还有一些别的科技, 推荐看一看
$O(\max{\lg n,\sqrt p})$