diff --git a/math/modular_exponentiation.cpp b/math/modular_exponentiation.cpp index e783e75d7..016ed0e99 100644 --- a/math/modular_exponentiation.cpp +++ b/math/modular_exponentiation.cpp @@ -1,8 +1,8 @@ /** * @file * @brief C++ Program for Modular Exponentiation Iteratively. - * Calculate the value of an integer a raised to an integer exponent b - * under modulo c. + * Calculate the value of an integer a raised to an integer exponent b + * under modulo c. * @note The time complexity of this approach is O(log b). * * Example: @@ -15,53 +15,46 @@ * We can also verify the result as 4^3 is 64 and 64 modulo 5 is 4 */ -#include +#include - -/// Iterative Function to calculate a raised to exponent b +/// Iterative Function to calculate a raised to exponent b /// under modulo c in O(log b) using modular exponentiation. -int power(int a, unsigned int b, int c) -{ - int ans = 1; /// Initialize the answer to be returned +int power(int a, unsigned int b, int c) { + int ans = 1; /// Initialize the answer to be returned - a = a % c; /// Update a if it is more than or - /// equal to c + a = a % c; /// Update a if it is more than or + /// equal to c - if (a == 0) - { - return 0; /// In case a is divisible by c; - } - - while (b > 0) - { - /// If b is odd, multiply a with answer - if (b & 1) - { - ans = (ans*a) % c; - } - - /// b must be even now - b = b>>1; // b = b/2 - a = (a*a) % c; - } - - return ans; -} + if (a == 0) { + return 0; /// In case a is divisible by c; + } + + while (b > 0) { + /// If b is odd, multiply a with answer + if (b & 1) { + ans = (ans * a) % c; + } + + /// b must be even now + b = b >> 1; // b = b/2 + a = (a * a) % c; + } + + return ans; +} /** * @brief Main function * @returns 0 on exit */ -int main() -{ - /// Give two numbers num1, num2 and modulo m - int num1 = 2; - int num2 = 5; - int m = 13; - - std::cout << "The value of "<