[UVA][D&C] 1230 - MODEX
Many well-known cryptographic operations require modular exponentiation. That is, given integers x , y and n , compute xy mod n . In this question, you are tasked to program an efficient way to execute this calculation.
Input
The input consists of a line containing the number c of datasets, followed by c datasets, followed by a line containing the number `0'.
Each dataset consists of a single line containing three positive integers, x , y , and n , separated by blanks. You can assume that 1 < x , n < 215 = 32768 , and 0 < y < 231 = 2147483648 .
Output
The output consists of one line for each dataset. The i -th line contains a single positive integer z such that
for the numbers x , y , z given in the i -th input dataset.
Sample Input
2 2 3 5 2 2147483647 13 0
Sample Output
3 11
#include <stdio.h>
long long Mod(long long x, long long y, long long m) {
long long ans = 1, tmp = x;
while(y) {
if(y&1) {
ans *= tmp;
ans %= m;
}
tmp = tmp*tmp, tmp %= m;
y >>= 1;
}
return ans;
}
int main() {
int t, x, y, n;
scanf("%d", &t);
while(t--) {
scanf("%d %d %d", &x, &y, &n);
printf("%lld\n", Mod(x, y, n));
}
return 0;
}