首页 > 其他 > 详细

快速幂&快速乘

时间:2015-03-15 18:22:53      阅读:312      评论:0      收藏:0      [点我收藏+]
LL mult_mod(LL a, LL b, LL c)
{
    a %= c; b %= c;
    LL ret = 0;
    LL tmp = a;
    while (b){
        if (b & 1){
            ret += tmp; 
            if (ret > c) ret -= c;//直接取模慢很多
        }
        tmp <<= 1;
        if (tmp > c) tmp -= c;
        b >>= 1;
    }
    return ret;
}

LL pow_mod(LL a, LL n, LL mod)
{
    LL ret = 1;
    LL temp = a%mod;
    while (n){
        if (n & 1) ret = mult_mod(ret, temp, mod);
        temp = mult_mod(temp, temp, mod);
        n >> 1;
    }
    return ret;
}

 

快速幂&快速乘

原文:http://www.cnblogs.com/yigexigua/p/4340036.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!