题目:Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,B,C<2^63).
分析:直接明了的快速幂乘,但是由于a很大,所以需要计算a*b%c时,将b按二进制分解
点击打开链接很好的一篇文章,可以学习
#include
#include
#include
using namespace std;
typedef long long ll;
ll mul(ll a,ll b,ll c)//计算a*b%c,将b按二进制分解
{
ll res=0;
for(;b;b>>=1){
if(b&1){
res+=a;
while(res>=c)res-=c;
}
a<<=1;
while(a>=c)a-=c;
}
return res;
}
ll qmod(ll a,ll b,ll c)//幂乘,将b分解为2进制
{
ll res=1;
for(;b;b>>=1){
if(b&1)res=mul(a,res,c);
a=mul(a,a,c);
}
return res;
}
int main()
{
ll a,b,c;
while(scanf("%I64d%I64d%I64d",&a,&b,&c)!=EOF){
printf("%I64d\n",qmod(a%c,b,c));
}
return 0;
}