快速幂

来源:互联网 发布:如何开淘宝网店 编辑:程序博客网 时间:2024/06/05 18:45

快速幂就是快速幂取模的简称,用到了二分的思想,用来求解a^b%p的这类问题。

在知道代码前,需要了解一些关于模运算的规则

基本运算规则如下

(a + b) % p = (a % p + b % p) % p (1)
(a - b) % p = (a % p - b % p) % p (2)
(a * b) % p = (a % p * b % p) % p (3)
(a^b) % p = ((a % p)^b) % p (4)

快速幂用到的就是(3)这条

例如求2^64%3:


继续推下去的话计算次数是log2b次的,也就是对b进行二分,最后只要计算a*a%c就可,算法其实就是这个过程的逆推

笔者举例是b是2的n次的是为了好理解,当b分奇偶时可额外处理


int powermod(int a,int b,int c){    int ans=1;    a=a%c;    while(b>0)    {        if(b%2==1)         //当b为奇数时的特殊处理            ans=(ans*a)%c;        b=b/2;        a=(a*a)%c;        //中心思想是二分实现的逆推    }    return ans;}


0 0
原创粉丝点击