Problem Definition
source: https://uva.onlinejudge.org/external/3/374.html
Calculate
R := B P
mod M for large values of B, P, and M using an efficient algorithm. (That’s right, this problem has a time dependency !!!.)
Input
The input will contain several test cases, each of them as described below. Consecutive test cases are separated by a single blank line.
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
For each test, the result of the computation. A single integer on a line by itself.
Sample Input
3
18132
17
17
1765
3
2374859
3029382
36123
Sample Output
13
2
13195
Solution:
source: https://uva.onlinejudge.org/external/3/374.html
Calculate
R := B P
mod M for large values of B, P, and M using an efficient algorithm. (That’s right, this problem has a time dependency !!!.)
Input
The input will contain several test cases, each of them as described below. Consecutive test cases are separated by a single blank line.
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
For each test, the result of the computation. A single integer on a line by itself.
Sample Input
3
18132
17
17
1765
3
2374859
3029382
36123
Sample Output
13
2
13195
Solution:
#include<stdio.h> main() { long int b,p,m,r,i,mod[500000]; while(scanf("%ld%ld%ld",&b,&p,&m)==3) { b=b%m; mod[0]=r=b; i=1; if(b%m==0) printf("0\n"); else { if(p==0) printf("1\n"); else { do{ r=(r*b)%m; mod[i++]=r; }while(r!=b); i--; printf("%ld\n",mod[p%i-1]); } } } return 0; }
No comments:
Post a Comment
Write your comment - Share Knowledge and Experience