6. 演算法
Fast_Fib(n)
a = 0; b = 1; //m=0
for i = (number of binary digit in n) to 1
t1 = a*(2*b-a);
t2 = b^2 + a^2;
a = t1; b = t2; //m*=2
if(current binary digit == 1)
t1=a+b; //m++
a = b; b = t1;
return a;
7. 例: n = 10 = 10102
i start 4 3 2 1 result
n 1010
^
1010
^
1010
^
1010
^
F(m) F(0) F(0*2+1) F(1*2) F(2*2+1) F(5*2) F(10)
a 0 1 1 5 55 55
b 1 1 2 8 89