Algorithms_in_C++
1.0.0
Set of algorithms implemented in C++.
|
Go to the documentation of this file.
8 #ifndef MATH_LARGE_NUMBER_H_
9 #define MATH_LARGE_NUMBER_H_
15 #include <type_traits>
55 for (
size_t i = strlen(number_str); i > 0; i--) {
56 char a = number_str[i - 1] -
'0';
66 std::cout <<
"------ Checking `large_number` class implementations\t"
105 a = a +
large_number(
"7000000000000000000000000000000");
106 if (a !=
large_number(
"7000000000000000000000000005202")) {
108 <<
"!=7000000000000000000000000005202)" <<
std::endl;
139 inline const unsigned char &
operator[](
size_t n)
const {
147 for (
size_t i = a.num_digits(); i > 0; i--)
148 out << static_cast<int>(a[i - 1]);
156 size_t N = a.num_digits();
159 for (
size_t i = 0; i < N; i++)
196 unsigned int carry = 0;
198 for (i = 0; i < max_L || carry != 0; i++) {
204 (*this)[i] = carry % 10;
240 "Must be integer addition unsigned integer types.");
260 "Can only have integer types.");
265 uint64_t carry = 0, temp;
267 temp =
static_cast<uint64_t
>((*this)[i]) * n;
288 #endif // MATH_LARGE_NUMBER_H_
int binExpo(int a, int b)
Definition: binary_exponent.cpp:28
void add_digit(unsigned int value)
Definition: large_number.h:118
int main()
Definition: double_factorial.cpp:67
int main()
Definition: gcd_of_n_numbers.cpp:28
bool test1()
Definition: large_factorial.cpp:17
int gcd(int num1, int num2)
Definition: gcd_iterative_euclidean.cpp:15
Class Complex to represent complex numbers as a field.
Definition: complex_numbers.cpp:20
int main()
Main function.
Definition: fibonacci.cpp:62
friend std::ostream & operator<<(std::ostream &out, const large_number &a)
Definition: large_number.h:146
large_number(std::vector< unsigned char > &vec)
Definition: large_number.h:51
void update_step(T *r, T *r0, const T2 quotient)
Definition: extended_euclid_algorithm.cpp:24
uint64_t double_factorial_iterative(uint64_t n)
Definition: double_factorial.cpp:17
double arg() const
Member function to give the argument of our complex number.
Definition: complex_numbers.cpp:87
Complex operator*(const Complex &other)
Operator overload of '*' on Complex class. Operator overload to be able to multiple two complex numbe...
Definition: complex_numbers.cpp:117
Definition: large_number.h:24
large_number fib(uint64_t n)
Definition: fibonacci_large.cpp:24
int main()
Definition: fibonacci_fast.cpp:51
Complex operator-(const Complex &other)
Operator overload of '-' on Complex class. Operator overload to be able to subtract two complex numbe...
Definition: complex_numbers.cpp:106
Complex(const Complex &other)
Copy Constructor.
Definition: complex_numbers.cpp:58
Complex(double x=0.f, double y=0.f, bool is_polar=false)
Complex Constructor which initialises our complex number.
Definition: complex_numbers.cpp:43
double abs() const
Member function to give the modulus of our complex number. Member function to which gives the absolut...
Definition: complex_numbers.cpp:79
int main(int argc, char *argv[])
Definition: large_factorial.cpp:89
int gcd(int num1, int num2)
Definition: gcd_recursive_euclidean.cpp:14
Library to perform arithmatic operations on arbitrarily large numbers.
double get_rand()
Function to get random numbers to generate our complex numbers for test.
Definition: complex_numbers.cpp:201
int binExpo_alt(int a, int b)
Definition: binary_exponent.cpp:42
void tests()
Definition: complex_numbers.cpp:206
const Complex & operator=(const Complex &other)
Operator overload of '=' on Complex class. Operator overload to be able to copy RHS instance of Compl...
Definition: complex_numbers.cpp:160
int main()
Definition: gcd_recursive_euclidean.cpp:42
size_t num_digits() const
Definition: large_number.h:130
large_number & operator+=(large_number n)
Definition: large_number.h:192
bool is_prime(T num)
Definition: check_prime.cpp:22
double fast_power_recursive(T a, T b)
Definition: fast_power.cpp:26
void test(uint64_t n, uint64_t expected)
Definition: double_factorial.cpp:42
double real() const
Member function to get real value of our complex number. Member function (getter) to access the class...
Definition: complex_numbers.cpp:64
large_number(const large_number &a)
Definition: large_number.h:48
static void test()
Definition: fibonacci.cpp:35
large_number & operator*=(const T n)
Definition: large_number.h:238
large_number()
Definition: large_number.h:27
int main()
Main function.
Definition: binary_exponent.cpp:55
Complex operator/(const Complex &other)
Operator overload of '/' on Complex class. Operator overload to be able to divide two complex numbers...
Definition: complex_numbers.cpp:142
large_number & operator++()
Definition: large_number.h:175
char digit_char(size_t i) const
Definition: large_number.h:248
uint64_t fibonacci(uint64_t n)
Definition: fibonacci.cpp:19
unsigned char & operator[](size_t n)
Definition: large_number.h:137
uint64_t phiFunction(uint64_t n)
Definition: eulers_totient_function.cpp:32
int main()
Definition: factorial.cpp:15
void multiply(const T n)
Definition: large_number.h:258
Complex operator~() const
Operator overload of '~' on Complex class. Operator overload of the BITWISE NOT which gives us the co...
Definition: complex_numbers.cpp:130
std::ostream & operator<<(std::ostream &os, const Complex &num)
Operator overload of '<<' of ostream for Complex class. Overloaded insersion operator to accommodate ...
Definition: complex_numbers.cpp:186
large_number & operator=(const large_number &b)
Definition: large_number.h:229
int main()
Main function.
Definition: extended_euclid_algorithm.cpp:87
uint64_t fib(uint64_t n)
Definition: fibonacci_fast.cpp:30
bool operator==(const Complex &a, const Complex &b)
Operator overload of '==' on Complex class. Logical Equal overload for our Complex class.
Definition: complex_numbers.cpp:175
std::vector< unsigned char > _digits
Definition: large_number.h:285
int main()
Definition: check_prime.cpp:45
bool test2()
Definition: large_factorial.cpp:54
int sum_of_divisor(int num)
Definition: check_amicable_pair.cpp:21
double imag() const
Member function to get imaginary value of our complex number. Member function (getter) to access the ...
Definition: complex_numbers.cpp:70
static bool test()
Definition: large_number.h:65
int main()
Definition: complex_numbers.cpp:268
friend bool operator==(large_number const &a, large_number const &b)
Definition: large_number.h:155
unsigned int factorial(unsigned int n)
Definition: factorial.cpp:8
void tests()
Definition: double_factorial.cpp:50
T sync_with_stdio(T... args)
int gcd(int *a, int n)
Definition: gcd_of_n_numbers.cpp:15
int main()
Definition: fast_power.cpp:68
uint64_t double_factorial_recursive(uint64_t n)
Definition: double_factorial.cpp:30
void extendedEuclid(T A, T B, T *GCD, T2 *x, T2 *y)
Definition: extended_euclid_algorithm.cpp:70
void test()
Definition: check_amicable_pair.cpp:56
large_number(int n)
Definition: large_number.h:39
Complex operator+(const Complex &other)
Operator overload of '+' on Complex class. Operator overload to be able to add two complex numbers.
Definition: complex_numbers.cpp:95
void extendedEuclid_1(T1 A, T1 B, T1 *GCD, T2 *x, T2 *y)
Definition: extended_euclid_algorithm.cpp:41
int main()
Definition: gcd_iterative_euclidean.cpp:47
friend bool operator!=(large_number const &a, large_number const &b)
Definition: large_number.h:168
double fast_power_linear(T a, T b)
Definition: fast_power.cpp:50
large_number & operator++(int)
Definition: large_number.h:183
int main(int argc, char *argv[])
Main function.
Definition: eulers_totient_function.cpp:48
friend large_number & operator+(const large_number &a, const T &b)
Definition: large_number.h:220
bool are_amicable(int x, int y)
Definition: check_amicable_pair.cpp:48
int main()
Definition: check_amicable_pair.cpp:68
T sum(const std::vector< std::valarray< T >> &A)
Definition: vector_ops.hpp:232
int main()
Definition: graph_coloring.cpp:96