Advertisement
Shiam7777777

Untitled

Jan 23rd, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.91 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. void multiply(int F[2][2], int M[2][2]);
  4.  
  5. void power(int F[2][2], int n);
  6.  
  7. /* function that returns nth Fibonacci number */
  8. int fib(int n)
  9. {
  10. int F[2][2] = {{1,1},{1,0}};
  11. if (n == 0)
  12.     return 0;
  13. power(F, n-1);
  14. return F[0][0];
  15. }
  16.  
  17. /* Optimized version of power() in method 4 */
  18. void power(int F[2][2], int n)
  19. {
  20. if( n == 0 || n == 1)
  21.     return;
  22. int M[2][2] = {{1,1},{1,0}};
  23.  
  24. power(F, n/2);
  25. multiply(F, F);
  26.  
  27. if (n%2 != 0)
  28.     multiply(F, M);
  29. }
  30.  
  31. void multiply(int F[2][2], int M[2][2])
  32. {
  33. int x = F[0][0]*M[0][0] + F[0][1]*M[1][0];
  34. int y = F[0][0]*M[0][1] + F[0][1]*M[1][1];
  35. int z = F[1][0]*M[0][0] + F[1][1]*M[1][0];
  36. int w = F[1][0]*M[0][1] + F[1][1]*M[1][1];
  37.  
  38. F[0][0] = x;
  39. F[0][1] = y;
  40. F[1][0] = z;
  41. F[1][1] = w;
  42. }
  43.  
  44. /* Driver program to test above function */
  45. int main()
  46. {
  47. int n = 9;
  48. printf("%d", fib(9));
  49. getchar();
  50. return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement