快速幂算法

快速幂算法——可迅速求出a^b。其主要理论依据如下:

        1,当b为偶数时,a^b可以转为a^2的b/2次方。

        2,当b为奇数时,a^b可以转为a^2的b/2次方,再乘以a。

 

 1 int quick(int a,int b)
 2 {
 3     int s = 1;
 4     while (b > 0) {
 5         if (b % 2 == 1) {//b=b>>1保证了在最后一步肯定会执行该if判断
 6             s = s * a;
 7         }
 8         a = a * a;
 9         b = b >> 1;
10     }
11     return s;
12 }

 

 

 

利用快速幂方法可以迅速求出一个数的任意次方。再结合a*b%m=(a%m)*(b%m)%m,就可得出下面计算代码:

 

int mod_exp(int a, int b, int c)        //快速幂取余a^b%c
{
    int res, t;
    res = 1;
    t = a % c;
    while (b)
    {
        if (b & 1)
        {
            res = res * t % c;
        }
        t = t * t % c;
        b >>= 1;
    }
    return res;
}

 

posted @ 2018-04-14 15:34  Somnus、M  阅读(2838)  评论(0编辑  收藏  举报