36.牛牛的Fib数列
题目描述
牛牛重新定义了斐波那契数列,牛牛定义f(n) = f(n-1)+f(n+1); f(1)=a, f(2)=b, 现在给定初始值 a, b,现在求第n项f(n)%1000000007的值。
其中 1<=|x|, |y|, n<=10^9
输入
1,2,3
返回值
1
说明
f(2)=f(3)+f(1), 所以f(3) = f(2)-f(1)=2-1=1
输入
-1,-2,3
返回值
1000000006
说明
同样例1:f(3)=-1%1000000007=1000000006
分析
1.数学问题,
f(n)=f(n-1)+f(n+1);f(1)=a,f(2)=b; ———–>f(n+1)=f(n)-f(n-1);
f(3)=b-a; f(4) = -a; f(5) = -b; f(6) = a-b;f(7) = a
所以可以得出结论该数列是以6位周期的循环队列
2.现在只需要考虑n对6取模然后即可得到指定该数列的值
3.然后在将得到的值对 1000000007 取模
4.如果是负数,就加上 1000000007
代码实现
import java.util.*;
public class Solution {
/**
*
* @param a int整型
* @param b int整型
* @param n int整型
* @return int整型
*/
public int solve (int a, int b, int n) {
int mod = 1000000007;
int res = 0;
if(n%6==0)
res = a-b;
if(n%6==1)
res = a;
if(n%6==2)
res = b;
if(n%6==3)
res = b-a;
if(n%6==4)
res = -a;
if(n%6==5)
res = -b;
res %=mod;
if(res<0)
res+=mod;
return res;
}
}