36.牛牛的Fib数列

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;	
    	}	
    }

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值