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

Computes N^th Fibonacci number given as input argument. Uses custom build arbitrary integers library to perform additions and other operations. More...

#include <cinttypes>
#include <ctime>
#include <iostream>
#include "./large_number.h"
Include dependency graph for fibonacci_large.cpp:

Functions

large_number fib (uint64_t n)
 
int main (int argc, char *argv[])
 

Detailed Description

Computes N^th Fibonacci number given as input argument. Uses custom build arbitrary integers library to perform additions and other operations.

Took 0.608246 seconds to compute 50,000^th Fibonacci number that contains 10450 digits!

Author
Krishna Vedala
See also
fibonacci.cpp, fibonacci_fast.cpp, string_fibonacci.cpp

Function Documentation

◆ fib()

large_number fib ( uint64_t n)

Compute fibonacci numbers using the relation

\[f(n)=f(n-1)+f(n-2)\]

and returns the result as a large_number type.

24 {
25 large_number f0(1);
26 large_number f1(1);
27
28 do {
29 large_number f2 = f1;
30 f1 += f0;
31 f0 = f2;
32 n--;
33 } while (n > 2); // since we start from 2
34
35 return f1;
36}
Definition large_number.h:24

◆ main()

int main ( int argc,
char * argv[] )
38 {
39 uint64_t N;
40 if (argc == 2) {
41 N = strtoull(argv[1], NULL, 10);
42 } else {
43 std::cout << "Enter N: ";
44 std::cin >> N;
45 }
46
47 clock_t start_time = std::clock();
49 clock_t end_time = std::clock();
50 double time_taken = static_cast<double>(end_time - start_time) /
51 static_cast<double>(CLOCKS_PER_SEC);
52
54 << N << "^th Fibonacci number: " << result << std::endl
55 << "Number of digits: " << result.num_digits() << std::endl
56 << "Time taken: " << std::scientific << time_taken << " s"
57 << std::endl;
58
59 N = 5000;
60 if (fib(N) ==
62 "387896845438832563370191630832590531208212771464624510616059721489"
63 "555013904403709701082291646221066947929345285888297381348310200895"
64 "498294036143015691147893836421656394410691021450563413370655865623"
65 "825465670071252592990385493381392883637834751890876297071203333705"
66 "292310769300851809384980180384781399674888176555465378829164426891"
67 "298038461377896902150229308247566634622492307188332480328037503913"
68 "035290330450584270114763524227021093463769910400671417488329842289"
69 "149127310405432875329804427367682297724498774987455569190770388063"
70 "704683279481135897373999311010621930814901857081539785437919530561"
71 "751076105307568878376603366735544525884488624161921055345749367589"
72 "784902798823435102359984466393485325641195222185956306047536464547"
73 "076033090242080638258492915645287629157575914234380914230291749108"
74 "898415520985443248659407979357131684169286803954530954538869811466"
75 "508206686289742063932343848846524098874239587380197699382031717420"
76 "893226546887936400263079778005875912967138963421425257911687275560"
77 "0360311370547754724604639987588046985178408674382863125"))
78 std::cout << "Test for " << N << "^th Fibonacci number passed!"
79 << std::endl;
80 else
81 std::cerr << "Test for " << N << "^th Fibonacci number failed!"
82 << std::endl;
83
84 return 0;
85}
T clock(T... args)
constexpr uint32_t N
A struct to represent sparse table for min() as their invariant function, for the given array A....
Definition sparse_table.cpp:47
T endl(T... args)
large_number fib(uint64_t n)
Definition fibonacci_large.cpp:24
uint64_t result(uint64_t n)
Definition fibonacci_sum.cpp:76
T scientific(T... args)
T strtoull(T... args)