Answer:
Step-by-step explanation:
#include <iostream>
#include<vector>
using namespace std;
//calculating k value in binary digits
vector<int> BinaryK(int k){
vector<int> temp;
int r;
while(k!=0)
{
r = k%2; //getting binary value at every step
temp.push_back(r);
k /= 2;
}
return temp;
}
int ModularExpo(int a, vector<int> k, int n){
if(n == 1){ //if denominator is 1
return 0;
}
int b = 1;
bool zeros = std::all_of(k.begin(), k.end(), [](int i) { return i==0; }); //checking denominator is zero vector
if(zeros){
return b;
}
int A = a;
if(k[0] == 1){
b = a;
}
for(int i=0;i<k.size();i++){
A = (A*A) % n;
if(k[i] == 1){
b = (A*b)%n;
}
}
return b;
}
int main(){
//declaring variables
int a,k,n;
//reading variables
cout<<"Reading a: ";
cin>>a;
cout<<"Reading k: ";
cin>>k;
cout<<"Enter n: ";
cin>>n;
//declaring vector
vector<int> vec;
//calling functions
vec = BinaryK(k);
cout<<"Result is: "<<ModularExpo(a,vec,n);
return 0;
}