Algorithms_in_C++  1.0.0
Set of algorithms implemented in C++.
fibonacci_sum.cpp File Reference

An algorithm to calculate the sum of Fibonacci Sequence: \(\mathrm{F}(n) + \mathrm{F}(n+1) + .. + \mathrm{F}(m)\). More...

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

Namespaces

 math
 for std::vector
 
 fibonacci_sum
 Functions for the sum of the Fibonacci Sequence: \(\mathrm{F}(n) + \mathrm{F}(n+1) + .. + \mathrm{F}(m)\).
 

Typedefs

using math::fibonacci_sum::matrix = std::vector< std::vector< uint64_t > >
 

Functions

math::fibonacci_sum::matrix math::fibonacci_sum::multiply (const math::fibonacci_sum::matrix &T, const math::fibonacci_sum::matrix &A)
 
math::fibonacci_sum::matrix math::fibonacci_sum::power (math::fibonacci_sum::matrix T, uint64_t ex)
 
uint64_t math::fibonacci_sum::result (uint64_t n)
 
uint64_t math::fibonacci_sum::fiboSum (uint64_t n, uint64_t m)
 
static void test ()
 
int main ()
 Main function. More...
 

Detailed Description

An algorithm to calculate the sum of Fibonacci Sequence: \(\mathrm{F}(n) + \mathrm{F}(n+1) + .. + \mathrm{F}(m)\).

An algorithm to calculate the sum of Fibonacci Sequence: \(\mathrm{F}(n) + \mathrm{F}(n+1) + .. + \mathrm{F}(m)\) where \(\mathrm{F}(i)\) denotes the i-th Fibonacci Number . Note that F(0) = 0 and F(1) = 1. The value of the sum is calculated using matrix exponentiation. Reference source: https://stackoverflow.com/questions/4357223/finding-the-sum-of-fibonacci-numbers

Author
Sarthak Sahu

Function Documentation

◆ fiboSum()

uint64_t math::fibonacci_sum::fiboSum ( uint64_t  n,
uint64_t  m 
)

Function to compute sum of fibonacci sequence from n to m.

Parameters
nstart of sequence
mend of sequence
Returns
uint64_t the sum of sequence
89  {
90  return (result(m + 2) - result(n + 1));
91  }
Here is the call graph for this function:

◆ main()

int main ( void  )

Main function.

Returns
0 on exit
135  {
136  test(); // execute the tests
137  return 0;
138 }
Here is the call graph for this function:

◆ multiply()

math::fibonacci_sum::matrix math::fibonacci_sum::multiply ( const math::fibonacci_sum::matrix T,
const math::fibonacci_sum::matrix A 
)

Function to multiply two matrices

Parameters
Tmatrix 1
Amartix 2
Returns
resultant matrix
38  {
40 
41  // multiplying matrices
42  result[0][0] = T[0][0]*A[0][0] + T[0][1]*A[1][0];
43  result[0][1] = T[0][0]*A[0][1] + T[0][1]*A[1][1];
44  result[1][0] = T[1][0]*A[0][0] + T[1][1]*A[1][0];
45  result[1][1] = T[1][0]*A[0][1] + T[1][1]*A[1][1];
46 
47  return result;
48  }
Here is the call graph for this function:

◆ power()

math::fibonacci_sum::matrix math::fibonacci_sum::power ( math::fibonacci_sum::matrix  T,
uint64_t  ex 
)

Function to compute A^n where A is a matrix.

Parameters
Tmatrix
expower
Returns
resultant matrix
56  {
57  math::fibonacci_sum::matrix A{{1, 1}, {1, 0}};
58  if (ex == 0 || ex == 1) {
59  return T;
60  }
61 
62  T = power(T, ex / 2);
63  T = multiply(T, T);
64  if (ex & 1) {
65  T = multiply(T, A);
66  }
67  return T;
68  }
Here is the call graph for this function:

◆ result()

uint64_t math::fibonacci_sum::result ( uint64_t  n)

Function to compute sum of fibonacci sequence from 0 to n.

Parameters
nnumber
Returns
uint64_t ans, the sum of sequence
75  {
76  math::fibonacci_sum::matrix T{{1, 1}, {1, 0}};
77  T = power(T, n);
78  uint64_t ans = T[0][1];
79  ans = (ans - 1);
80  return ans;
81  }
Here is the call graph for this function:

◆ test()

static void test ( )
static

Function for testing fiboSum function. test cases and assert statement.

Returns
void
100  {
101  uint64_t n = 0, m = 3;
102  uint64_t test_1 = math::fibonacci_sum::fiboSum(n, m);
103  assert(test_1 == 4);
104  std::cout << "Passed Test 1!" << std::endl;
105 
106  n = 3;
107  m = 5;
108  uint64_t test_2 = math::fibonacci_sum::fiboSum(n, m);
109  assert(test_2 == 10);
110  std::cout << "Passed Test 2!" << std::endl;
111 
112  n = 5;
113  m = 7;
114  uint64_t test_3 = math::fibonacci_sum::fiboSum(n, m);
115  assert(test_3 == 26);
116  std::cout << "Passed Test 3!" << std::endl;
117 
118  n = 7;
119  m = 10;
120  uint64_t test_4 = math::fibonacci_sum::fiboSum(n, m);
121  assert(test_4 == 123);
122  std::cout << "Passed Test 4!" << std::endl;
123 
124  n = 9;
125  m = 12;
126  uint64_t test_5 = math::fibonacci_sum::fiboSum(n, m);
127  assert(test_5 == 322);
128  std::cout << "Passed Test 5!" << std::endl;
129 }
Here is the call graph for this function:
math::fibonacci_sum::power
math::fibonacci_sum::matrix power(math::fibonacci_sum::matrix T, uint64_t ex)
Definition: fibonacci_sum.cpp:56
test_3
static void test_3()
Definition: heavy_light_decomposition.cpp:592
std::vector
STL class.
test_2
static void test_2()
Definition: heavy_light_decomposition.cpp:549
ans
ll ans(ll n)
Definition: matrix_exponentiation.cpp:91
std::cout
math::fibonacci_sum::fiboSum
uint64_t fiboSum(uint64_t n, uint64_t m)
Definition: fibonacci_sum.cpp:89
test
static void test()
Definition: fibonacci_sum.cpp:100
test_1
static void test_1()
Definition: heavy_light_decomposition.cpp:505
std::endl
T endl(T... args)
machine_learning::multiply
std::vector< std::valarray< T > > multiply(const std::vector< std::valarray< T >> &A, const std::vector< std::valarray< T >> &B)
Definition: vector_ops.hpp:460
math::fibonacci_sum::result
uint64_t result(uint64_t n)
Definition: fibonacci_sum.cpp:75