1600: Big Mod
Result | TIME Limit | MEMORY Limit | Run Times | AC Times | JUDGE |
---|---|---|---|---|---|
![]() | 3s | 8192K | 1658 | 309 | Standard |
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
#include<iostream>
using namespace std;
int main(){
long long b,p,m,d;
while(cin>>b>>p>>m)
{
int a[100],k=0;
if(b==0||m==1){cout<<"0"<<endl;continue; }
if(p==0){cout<<"1"<<endl;continue;}
while(p>0){ a[k++]=p%2; p/=2;} k--; d=b;
int t=1;
for(int i=0;i<=k;i++)
{
if(a[i]) t=(t*d)%m;
d=(d*d)%m;
}
cout<<t<<endl;
}
return 0;
}
#include<stdio.h> long mod(int b,int p,int m) { if(m==1||b==0) return 0; if(p==0) return 1; if(p%2) return (b%m*mod(b,p-1,m))%m; long long temp=mod(b,p/2,m); return (temp*temp)%m; } int main() { long long b,p,m; while(scanf("%d%d%d",&b,&p,&m)!=-1) { printf("%ld/n",mod(b,p,m)); } return 0; }