Big Mod |
Calculate
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
关键是(A*B)%C=(A%C)*(B%C)
#include <stdio.h> int bigmod( int b, int p, int m ) { if(p==0) return 1; if (p==1) return b; int a=bigmod(b,p/2,m); if (p%2) return (((a*a)%m)*b)%m; else return (a*a)%m; } int main() { int b,p,m; while(scanf("%d%d%d",&b,&p,&m)!=EOF) printf("%d\n",bigmod(b%m,p,m)); return 0; }