求斐波那契數列第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];
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章