Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include<iostream>
- using namespace std;
- #define ll unsigned long long
- /* Helper function that multiplies 2 matrices F and M of size 2*2, and
- puts the multiplication result back to F[][] */
- void multiply(ll F[2][2], ll M[2][2]);
- /* Helper function that calculates F[][] raise to the power n and puts the
- result in F[][]
- Note that this function is designed only for fib() and won't work as general
- power function */
- void power(ll F[2][2], ll n);
- ll fib(ll n)
- {
- ll F[2][2] = {{1,1},{1,0}};
- if (n == 0)
- return 0;
- power(F, n-1);
- return F[0][0];
- }
- void multiply(ll int F[2][2], ll int M[2][2])
- {
- ll x = F[0][0]*M[0][0] + F[0][1]*M[1][0];
- ll int y = F[0][0]*M[0][1] + F[0][1]*M[1][1];
- ll int z = F[1][0]*M[0][0] + F[1][1]*M[1][0];
- ll int w = F[1][0]*M[0][1] + F[1][1]*M[1][1];
- F[0][0] = x;
- F[0][1] = y;
- F[1][0] = z;
- F[1][1] = w;
- }
- void power(ll F[2][2],ll int n)
- {
- ll int i;
- ll int M[2][2] = {{1,1},{1,0}};
- // n - 1 times multiply the matrix to {{1,0},{0,1}}
- for (i = 2; i <= n; i++)
- multiply(F, M);
- }
- /* Driver program to test above function */
- int main()
- {
- ll int n=5010;
- cout<<fib(n);
- ///printf("%d", fib(n));
- getchar();
- return 0;
- }
- //https://www.geeksforgeeks.org/program-for-nth-fibonacci-number/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement