• Source
    1. // C++ Program to find n'th fibonacci Number in
    2. // with O(Log n) arithmatic operations
    3. #include <bits/stdc++.h>
    4. using namespace std;
    5.  
    6. const int MAX = 1000;
    7.  
    8. // Create an array for memoization
    9. int f[MAX] = {0};
    10.  
    11. // Returns n'th fuibonacci number using table f[]
    12. int fib(int n)
    13. {
    14. // Base cases
    15. if (n == 0)
    16. return 0;
    17. if (n == 1 || n == 2)
    18. return (f[n] = 1);
    19.  
    20. // If fib(n) is already computed
    21. if (f[n])
    22. return f[n];
    23.  
    24. int k = (n & 1)? (n+1)/2 : n/2;
    25.  
    26. // Applyting above formula [Note value n&1 is 1
    27. // if n is odd, else 0.
    28. f[n] = (n & 1)? (fib(k)*fib(k) + fib(k-1)*fib(k-1))
    29. : (2*fib(k-1) + fib(k))*fib(k);
    30.  
    31. return f[n];
    32. }
    33.  
    34. /* Driver program to test above function */
    35. int main()
    36. {
    37. int n = 9;
    38. printf("%d ", fib(n));
    39. return 0;
    40. }