Add modular_exponentiation

This commit is contained in:
Shri Prakash Bajpai 2020-10-13 20:01:09 +05:30 committed by GitHub
parent 444ec53722
commit d7b1ea8156
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -0,0 +1,44 @@
// Iterative C++ program for modular exponentiation.
//The program calculates the value of an integer raised to an integer exponent under modulo an integer.
#include <iostream>
// Iterative Function to calculate a raised to exponent b under modulo c in O(log b)
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
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;
}
// Main Function
int main()
{
int num1 = 2;
int num2 = 5;
int m = 13;
std::cout << "The value of "<<num1<<" raised to exponent "<<num2<<" under modulo "<<m<<" is " << power(num1, num2, m);
return 0;
}