码迷,mamicode.com
首页 > 其他好文 > 详细

二分快速幂

时间:2018-11-24 16:42:19      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:头文件   math.h   快速   自定义   math   数据量   定义   amp   次方   

二分快速幂

求a的b次方,自定义pow库函数:

pow(a, b)是数学头文件math.h里面有的函数,但是它返回值是double类型,数据有精度误差。
可以改成这样:

long long pow(long long a, long long b){
    long long ret = 1;
    for(long long i = 1; i <= b; i ++){
        ret *= a;
    }
    return ret;
}

二分快速幂:

数据量大会超时,使用自定义的pow也要超市,这时候要使用二分快速幂了

代码模板:

const int MOD=1e9+7;
typedef long long ll;

LL pow_mod(LL a, LL b){//a的b次方
    if(b == 0) return 1%MOD;
    LL ret = pow_mod(a, b/2);
    ret = ret * ret % MOD;
    if(b % 2 == 1) ret = ret * a % MOD;
    return ret;
}

快速乘:

LL mul(LL a, LL b, LL p){//快速乘,计算a*b%p 
    LL ret = 0;
    while(b){
        if(b & 1) ret = (ret + a) % p;
        a = (a + a) % p;
        b >>= 1;
    }
    return ret;
}

二分快速幂

标签:头文件   math.h   快速   自定义   math   数据量   定义   amp   次方   

原文地址:https://www.cnblogs.com/fisherss/p/10012340.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!