求斐波那契数列第N项的最后一位

RT,该怎么求呢?

首先,你可能会想到,顺序遍历求解。

利用通项公式,可以得到斐波那契序列:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34…

那每一项的最后一位就是:

0, 1, 1, 2, 3, 5, 8, 3, 1, 4…

这样做的效率是线性的,N如果上亿就很吃力了。

那么,你很快就会想到,利用斐波那契矩阵求解。

这样做的效率是log(N),但实现起来略微麻烦。

对于斐波那契数列每一项的最后一位,有没有一个固定的模式呢?

答案是有的!

事实上,从第一项开始,每60个序列元素构成一个循环周期。

也就是说,规律像这样:

0, 1, 1, 2, 3, 5, 8, 3, 1, 4…(60项)…0, 1, 1, 2…

那不就很好实现了吗?

下面我给出了JavaScript的解法。

N从第1项开始,没有考虑第0项喔!

var sequence = [];
var a = 1;
var b = 1;

for(var i=1;i<=60;i++){
    sequence.push(a);
    var temp = (a + b) % 10;
    a = b;
    b = temp;
}

function lastFibDigit(n){  
    return sequence[n % 60 - 1];
}

 

点赞