Solution of 374 - Big Mod

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 


18132 
17 

17 
1765 


2374859 
3029382 
36123 

Sample Output 

13 

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;
   }
image

No comments:

Post a Comment

Write your comment - Share Knowledge and Experience