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