快速幂算法

来源:互联网 发布:linux怎么安装vmtools 编辑:程序博客网 时间:2024/06/06 13:02

参考:http://blog.csdn.net/jiange_zh/article/details/50684528

实现原理:

当n较大时,可使用快速幂:
**若n为偶数, base^n = base^(n/2) * base^(n/2);
若n为奇数, base^n = base * base^((n-1)/2) * base^((n-1)/2);**

递归代码:

double PowerWithUnsignedN(double base, unsigned int n){    if (0 == n) return 1;    if (1 == n) return base;    double res = PowerWithUnsignedN(base, n>>1);    res *= res;    if (n & 1) //n为奇数        res *= base;    return res;}

非递归:

double PowerWithUnsignedN(double base, unsigned int n){    double res = 1.0;    while (n > 0)    {        if (n & 1)            res *= base;        base *= base;        n >>= 1;    }    return res;}

快速幂取模,在以上的代码中加了点东西

long long quick_mod(long long base,long long n,long long mod){    long long res=1;    while(n>0)    {        if(n%2!=0)        {            res=(res*base)%mod;        }        base=(base*base)%mod;        n>>=1;    }    res=res%mod    return res;}
原创粉丝点击