2012-01-12 17:21:08Morris

[UVA] 374 - Big Mod


 Big Mod 

Calculate

displaymath25

for large values of B, P, and M using an efficient algorithm. (That's right, this problem has a time dependency !!!.)

Input

Three integer values (in the order B, P, M) will be read one number per line. B and P are integers in the range 0 to 2147483647 inclusive. M is an integer in the range 1 to 46340 inclusive.

Output

The result of the computation. A single integer.

Sample Input

3
18132
17

17
1765
3

2374859
3029382
36123

Sample Output

13
2
13195


作法 : D&C


#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;
        }
        y >>= 1;
        tmp *= tmp, tmp %= m;
    }
    return ans;
}
int main() {
    int B, P, M;
    while(scanf("%d %d %d", &B, &P, &M) == 3) {
        printf("%lld\n", Mod(B, P, M));
    }
    return 0;
}