void fibLogSlave(int n, int *Fn1, int *Fn)
{ int a, b, c, d;
if( n==1 )
{ *Fn1 = 0; *Fn = 1; }
else
{ fibLogSlave(n/2, &a, &b);
c = a*a+b*b;
d = b*(b+2*a);
if( n % 2 )/*n odd*/
{ *Fn1 = d; *Fn = c+d; }
else/*n even*/
{ *Fn1 = c; *Fn = d; }
} }
int fibonacciVF(int n)
{ int Fn1, Fn;
fibLogSlave(n, &Fn1, &Fn);
return Fn;
}
/* O(log(n)) time Fibonacci Function */
BugBear