CODEVS 3500

题目描述

         输入3个数a,b,c,求a^b mod c=?
输入描述
         三个数a,b,c
输出描述
         一个数,即a^b mod c 的答案。
样例输入
5 10 9
样例输出

4

基本的二进制快速幂,因为任意一个十进制数可以写成一个二进制权展开式,例如10=2^3+2^1

那么a^10=a^(2^3)*a^(2^1),使用位运算,可以使得代码十分简洁

#include <cstdio>
typedef long long LL;
LL fast_cover(LL a,LL b,LL c)
{
    LL s=1;
    while(b)
    {
        if(b&1) s=(s*a)%c;
        a=(a*a)%c;
        b>>=1;
    }
    return s;
}
int main()
{
    LL a,b,c;
    while(~scanf("%lld%lld%lld",&a,&b,&c))
    {
        printf("%lld
",fast_cover(a,b,c));
    }
    return 0;
}
原文地址:https://www.cnblogs.com/zsyacm666666/p/5380053.html