Given three numbers a, b and c, we need to find (ab) % c
Now why do “% c” after exponentiation, because ab will be really large even for relatively small values of a, b and that is a problem because the data type of the language that we try to code the problem, will most probably not let us store such a large number.
Input : a = 2312 b = 3434 c = 6789 Output : 6343 Input : a = -3 b = 5 c = 89 Output : 24
The idea is based on below properties.
(m * n) % p has a very interesting property:
(m * n) % p =((m % p) * (n % p)) % p
if b is even:
(a ^ b) % c = ((a ^ b/2) * (a ^ b/2))%c ? this suggests divide and conquer
if b is odd:
(a ^ b) % c = (a * (a ^( b-1))%c
If we have to return the mod of a negative number x whose absolute value is less than y:
then (x + y) % y will do the trick
Also as the product of (a ^ b/2) * (a ^ b/2) and a * (a ^( b-1) may cause overflow, hence we must be careful about those scenarios
Power is 6
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
- Modular Exponentiation (Power in Modular Arithmetic)
- Write a program to calculate pow(x,n)
- Find the Missing Number in a sorted array
- Euler’s Totient Function
- Count Possible Decodings of a given Digit Sequence
- Dynamic Programming vs Divide-and-Conquer
- Cut all the rods with some length such that the sum of cut-off length is maximized
- First strictly smaller element in a sorted array in Java
- First strictly greater element in a sorted array in Java
- Java 8 | Arrays parallelSort() method with Examples