在斐波那契数列中,Fib0=0,Fib1=1,Fibn=Fibn−1+Fibn−2(n>1)Fib0=0,Fib1=1,Fibn=Fibn−1+Fibn−2(n>1)。
给定整数n,求Fibnmod10000Fibnmod10000。
输入格式
输入包含多组测试用例。
每个测试用例占一行,包含一个整数n。
当输入用例n=-1时,表示输入终止,且该用例无需处理。
输出格式
每个测试用例输出一个整数表示结果。
每个结果占一行。
数据范围
0≤n≤2∗109
输入样例:
0
9
999999999
1000000000
-1
输出样例:
0
34
626
6875
思路:由于n的范围达到了1e9,所以就算递推o(n)的做法也无法满足时间的要求,所以这里用到了矩阵乘法,就是把这种递推的运算用一个递推矩阵参与的矩阵乘法模拟,因为矩阵可以一次存储多个数字,所以极大的减少了计算的状态,简单地说,这里就是用一个矩阵a[2][2]初始等于={ {0,1},{1,1}},a就是递推矩阵,让f[2]={0,1},(fib数列的前两个数),所以f[0]=fib(n),f[1]=fib(n+1),让f右乘一个a后,相当于:
f[0]&#