FZU Problem 1752 A^B mod C 快速幂乘

题目: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;
}


你可能感兴趣的:(快速幂)