码迷,mamicode.com
首页 > 编程语言 > 详细

快速幂取模算法

时间:2015-09-03 00:38:23      阅读:324      评论:0      收藏:0      [点我收藏+]

标签:

什么是快速幂?

快速幂应当是快速幂取模的简称

对于一般的求幂算法,求$a^b\,\bmod\,m$,即使用循环b次的方法,复杂度是$O(b)$的,当b很大的时候,这种算法就会显得十分缓慢。

快速幂是基于以下明显的事实:

$${a^b} \equiv {(a^2)^{\frac{b}{2}}} \pmod{m}\quad b\ is\ even$$

$${a^b} \equiv {(a^2)^{\frac{b}{2}}*a} \pmod{m}\quad b\ is\ odd$$

那么我们得到这样一个算法,如果当前的$b$是偶数,那么$a$就取平方,否则取$a^2*a$,每次$b=b/2$。算法的复杂度是$O(log\ b)$。

代码

 

typedef long long LL;
//calculate a^b%m
LL Pow(LL a,LL b,LL m) {
    if (b == 0)
        return 1;
    if (b & 1)
        return Pow(a * a, b >> 1, m) * a;
    else
        return Pow(a * a, b >> 1, m);
}

 

快速幂取模算法

标签:

原文地址:http://www.cnblogs.com/HarryGuo2012/p/4779773.html

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