#P4994. 终于结束的起点

    ID: 3965 远端评测题 1000ms 500MiB 尝试: 0 已通过: 0 难度: 5 上传者: 标签>递推枚举,暴力斐波那契,Fibonacci洛谷月赛

终于结束的起点

Description

广为人知的斐波拉契数列 fib(n)\mathrm{fib}(n) 是这么计算的

$$\mathrm{fib}(n)=\begin{cases} 0,& n=0 \\ 1,& n=1 \\ \mathrm{fib}(n-1) + \mathrm{fib}(n-2),& n>1 \end{cases}$$

也就是 0,1,1,2,3,5,8,130, 1, 1, 2, 3, 5, 8, 13 \cdots,每一项都是前两项之和。

小 F 发现,如果把斐波拉契数列的每一项对任意大于 11 的正整数 MM 取模的时候,数列都会产生循环。

当然,小 F 很快就明白了,因为 (fib(n1)modM\mathrm{fib}(n - 1) \bmod M) 和 (fib(n2)modM)\mathrm{fib}(n - 2) \bmod M) 最多只有 M2M ^ 2 种取值,所以在 M2M ^ 2 次计算后一定出现过循环。

甚至更一般地,我们可以证明,无论取什么模数 MM,最终模 MM 下的斐波拉契数列都会是 0,1,,0,1,0, 1, \cdots, 0, 1, \cdots

现在,给你一个模数 MM,请你求出最小的 n>0n > 0,使得 $\mathrm{fib}(n) \bmod M = 0, \mathrm{fib}(n + 1) \bmod M = 1$。

Input Format

输入一行一个正整数 MM

Output Format

输出一行一个正整数 nn

2
3
6
24

Hint

样例 1 解释

斐波拉契数列为 0,1,1,2,3,5,8,13,21,34,0, 1, 1, 2, 3, 5, 8, 13, 21, 34, \cdots,在对 22 取模后结果为 0,1,1,0,1,1,0,1,1,0,0, 1, 1, 0, 1, 1, 0, 1, 1, 0, \cdots

我们可以发现,当 n=3n = 3 时,f(n)mod2=0,f(n+1)mod2=1f(n) \bmod 2= 0, f(n + 1) \bmod 2 = 1,也就是我们要求的 nn 的最小值。

数据范围

对于 30%30\% 的数据,M18M \leq 18

对于 70%70\% 的数据,M2018M \leq 2018

对于 100%100\% 的数据,2M706150=0xAC6662 \leq M \leq 706150=\verb!0xAC666!

提示

如果你还不知道什么是取模 (mod)(\bmod),那我也很乐意告诉你,模运算是求整数除法得到的余数,也就是竖式除法最终「除不尽」的部分,也即

$$a \bmod M =k \iff a = bM + k\ (M > 0, 0 \leq k < M)$$

其中 a,b,ka, b, k 都是非负整数。

如果你使用 C / C++,你可以使用 % 来进行模运算。

如果你使用 Pascal,你可以使用 mod 来进行模运算。