#jZCybttg060505. 1645:Fibonacci

1645:Fibonacci

1645:Fibonacci

题目描述

我们知道斐波那契数列 F0=0,F1=1,Fn=Fn1+Fn2F_0=0, F_1=1, F_n = F_{n-1} + F_{n-2}

Fnmod104F_n \bmod 10^4

输入格式

多组数据,每组数据一行,一个整数 nn

输入以 1-1 结束。

输出格式

对于每组数据,输出 Fnmod104F_n \bmod 10^4

样例

样例输入 #1

0
9
999999999
1000000000
-1

样例输出 #1

0
34
626
6875

样例解释 #1

  • F0=0F_0 = 0,输出 00
  • F9=34F_9 = 34(因为 $F_0=0, F_1=1, F_2=1, F_3=2, F_4=3, F_5=5, F_6=8, F_7=13, F_8=21, F_9=34$),输出 3434
  • F999999999mod10000=626F_{999999999} \bmod 10000 = 626
  • F1000000000mod10000=6875F_{1000000000} \bmod 10000 = 6875

数据范围

对于全部数据,0n1090 \le n \le 10^9

时空限制

  • 时间限制:1000 ms
  • 内存限制:524288 KB

注意nn 很大,需要使用矩阵快速幂计算 Fibonacci 数列。递推矩阵为:

M=[1110]M = \begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix}

则有:

$$\begin{bmatrix} F_{n+1} & F_n \\ F_n & F_{n-1} \end{bmatrix} = M^n$$

因此,FnF_nMnM^n 的右上角(或左下角)元素。

具体地,计算 MnM^n,然后取右上角元素即可。注意 n=0n=0 时,M0M^0 是单位矩阵,右上角为 00,即 F0=0F_0=0

由于模数 1000010000 较小,矩阵元素在计算过程中取模即可。矩阵快速幂复杂度 O(23logn)=O(8logn)O(2^3 \log n) = O(8 \log n),可以接受。

注意多组数据,直到输入 1-1 结束。