# Find power of power under mod of a prime in C++

C++Server Side ProgrammingProgramming

In this problem we are given four values A, B, C, M(a prime number). Our task is to Find power of power under mod of a prime.

We simply need to find the value of (A ^ (B ^ C)) (mod M).

Let’s take an example to understand the problem,

## Input

A = 3, B = 6, C = 2, M = 11

## Output

3

## Explanation

(A ^ (B ^ C)) = (3 ^ (6 ^ 2)) = (3 ^ (36))(mod 11) = 3

## Solution Approach

A simple solution to the problem is by directly calculating the values of the (A ^ (B ^ C)) , which is done by first calculating the value of (B^C) and then (A ^ (B ^ C)) then taking its mod. (B^C) will result in a huge figure storing which can be a task. And the calculation might lead to overflow.

So, a more efficient approach would be using the fermat’s Little Theorem to find the values.

The theorem is,

a^(m-1) = 1 (mod M) where m is a prime number.

Using this we will convert bc of our problem to a number of the form,

x*(M-1) + y, for our given value of M.

Using the fermat's theorem, the part A^(x*(M-1)) becomes 1.

This will reduce the calculation to, finding the value of Ay.

The value of y can be calculated as,

Bc = x*(M-1) + y

This makes y the remainder left when we divide Bc by (M-1),

So, y = Bc % (M-1)

This makes the result alot easy as we need to find,

(A ^ ((B^C) %( M-1)) % M

Program to illustrate the working of our solution,

## Example

Live Demo

#include<iostream>
using namespace std;
int calcPowerMod(int x, int y, int p) {
int powMod = 1;
x = x % p;
while (y > 0) {
if (y & 1)
powMod = (powMod*x) % p;
y /=2; // y = y/2
x = (x*x) % p;
}
return powMod;
}
int findPowerOfPowerMod(int A, int B, int C, int M) {
return calcPowerMod(A, calcPowerMod(B, C, M-1), M);
}
int main() {
int A = 3, B = 6, C = 2, M = 11;
cout<<"The power of power under modulo is "<<findPowerOfPowerMod(A, B, C, M);
return 0;
}

## Output

The power of power under modulo is 3