Advertisement
Guest User

Untitled

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