From de99092144817ded2fa3a4068aafaecac39af70b Mon Sep 17 00:00:00 2001 From: CHILUKA UDAYCHANDRA <53470144+uday6670@users.noreply.github.com> Date: Wed, 25 Nov 2020 14:48:50 +0530 Subject: [PATCH] feat: largest_power (#1406) * largest_power * Update math/largest_power.cpp Co-authored-by: David Leal * Update math/largest_power.cpp Co-authored-by: David Leal * Update math/largest_power.cpp Co-authored-by: David Leal * Update math/largest_power.cpp Co-authored-by: David Leal * Update math/largest_power.cpp Co-authored-by: David Leal * Update math/largest_power.cpp Co-authored-by: David Leal * Update math/largest_power.cpp Co-authored-by: David Leal * Update math/largest_power.cpp Co-authored-by: David Leal * Update math/largest_power.cpp Co-authored-by: David Leal * Update math/largest_power.cpp Co-authored-by: David Leal * added a new line * updating DIRECTORY.md Co-authored-by: David Leal Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> --- DIRECTORY.md | 1 + math/largest_power.cpp | 78 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 math/largest_power.cpp diff --git a/DIRECTORY.md b/DIRECTORY.md index d86f504c4..a53ccf97e 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -148,6 +148,7 @@ * [Gcd Recursive Euclidean](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/math/gcd_recursive_euclidean.cpp) * [Large Factorial](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/math/large_factorial.cpp) * [Large Number](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/math/large_number.h) + * [Largest Power](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/math/largest_power.cpp) * [Lcm Sum](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/math/lcm_sum.cpp) * [Least Common Multiple](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/math/least_common_multiple.cpp) * [Magic Number](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/math/magic_number.cpp) diff --git a/math/largest_power.cpp b/math/largest_power.cpp new file mode 100644 index 000000000..8fffbbd07 --- /dev/null +++ b/math/largest_power.cpp @@ -0,0 +1,78 @@ +/** + * @file + * @brief Algorithm to find largest x such that p^x divides n! (factorial) using Legendre's Formula. + * @details Given an integer n and a prime number p, the task is to find the largest x such that + * p^x (p raised to power x) divides n! (factorial). This will be done using Legendre's formula: + * x = [n/(p^1)] + [n/(p^2)] + [n/(p^3)] + \ldots + 1 + * @see more on https://math.stackexchange.com/questions/141196/highest-power-of-a-prime-p-dividing-n + * @author [uday6670](https://github.com/uday6670) + */ + +#include /// for std::cin and std::cout +#include /// for assert + +/** + * @namespace math + * @brief Mathematical algorithms + */ +namespace math { + + /** + * @brief Function to calculate largest power + * @param n number + * @param p prime number + * @returns largest power + */ + uint64_t largestPower(uint32_t n, const uint16_t& p) + { + // Initialize result + int x = 0; + + // Calculate result + while (n) + { + n /= p; + x += n; + } + return x; + } + +} // namespace math + +/** + * @brief Function for testing largestPower function. + * test cases and assert statement. + * @returns `void` +*/ +static void test() +{ + uint8_t test_case_1 = math::largestPower(5,2); + assert(test_case_1==3); + std::cout<<"Test 1 Passed!"<