Algorithms_in_C++ 1.0.0
Set of algorithms implemented in C++.
Loading...
Searching...
No Matches
fibonacci_matrix_exponentiation.cpp File Reference

This program computes the N^th Fibonacci number in modulo mod input argument . More...

#include <iostream>
#include <vector>
#include <cassert>
Include dependency graph for fibonacci_matrix_exponentiation.cpp:

Functions

uint64_t fibo (uint64_t n, uint64_t mod)
 
void test ()
 
int main ()
 

Detailed Description

This program computes the N^th Fibonacci number in modulo mod input argument .

Takes O(logn) time to compute nth Fibonacci number

Author
villayatali123
[unknown author]()
See also
fibonacci.cpp, fibonacci_fast.cpp, string_fibonacci.cpp, fibonacci_large.cpp

Function Documentation

◆ fibo()

uint64_t fibo ( uint64_t n,
uint64_t mod )

This function finds nth fibonacci number in a given modulus

Parameters
nnth fibonacci number
modmodulo number
24{
28 n--;
29 result[0]=1, result[1]=1;
30 Identity[0][0]=1; Identity[0][1]=0;
31 Identity[1][0]=0; Identity[1][1]=1;
32
33 transition[0][0]=0;
34 transition[1][0]=transition[1][1]=transition[0][1]=1;
35
36 while(n)
37 {
38 if(n%2)
39 {
41 for(int i=0;i<2;i++)
42 {
43 for(int j=0;j<2;j++)
44 {
45 for(int k=0;k<2;k++)
46 {
47 res[i][j]=(res[i][j]%mod+((Identity[i][k]%mod*transition[k][j]%mod))%mod)%mod;
48 }
49 }
50 }
51 for(int i=0;i<2;i++)
52 {
53 for(int j=0;j<2;j++)
54 {
55 Identity[i][j]=res[i][j];
56 }
57 }
58 n--;
59 }
60 else{
62 for(int i=0;i<2;i++)
63 {
64 for(int j=0;j<2;j++)
65 {
66 for(int k=0;k<2;k++)
67 {
68 res1[i][j]=(res1[i][j]%mod+((transition[i][k]%mod*transition[k][j]%mod))%mod)%mod;
69 }
70 }
71 }
72 for(int i=0;i<2;i++)
73 {
74 for(int j=0;j<2;j++)
75 {
76 transition[i][j]=res1[i][j];
77 }
78 }
79 n=n/2;
80 }
81 }
82 return ((result[0]%mod*Identity[0][0]%mod)%mod+(result[1]%mod*Identity[1][0]%mod)%mod)%mod;
83}
double k(double x)
Another test function.
Definition composite_simpson_rule.cpp:117
uint64_t result(uint64_t n)
Definition fibonacci_sum.cpp:76

◆ main()

int main ( void )

Main function

107{
108 test();
109 uint64_t mod=1000000007;
110 std::cout<<"Enter the value of N: ";
111 uint64_t n=0; std::cin>>n;
112 std::cout<<n<<"th Fibonacci number in modulo " << mod << ": "<< fibo( n , mod) << std::endl;
113}
T endl(T... args)
uint64_t fibo(uint64_t n, uint64_t mod)
Definition fibonacci_matrix_exponentiation.cpp:23
void test()
Definition fibonacci_matrix_exponentiation.cpp:88
Here is the call graph for this function:

◆ test()

void test ( )

Function to test above algorithm

89{
90 assert(fibo(6, 1000000007 ) == 8);
91 std::cout << "test case:1 passed\n";
92 assert(fibo(5, 1000000007 ) == 5);
93 std::cout << "test case:2 passed\n";
94 assert(fibo(10 , 1000000007) == 55);
95 std::cout << "test case:3 passed\n";
96 assert(fibo(500 , 100) == 25);
97 std::cout << "test case:3 passed\n";
98 assert(fibo(500 , 10000) == 4125);
99 std::cout << "test case:3 passed\n";
100 std::cout << "--All tests passed--\n";
101}
Here is the call graph for this function: