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