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;
}
本文介绍了一种高效的大数模幂运算算法,适用于处理大数值的B, P, M进行模幂运算。输入包括三个整数B, P, M,输出为计算结果。通过使用位操作和递归调用等技巧提高计算效率。
1万+

被折叠的 条评论
为什么被折叠?



