分治算法求乘方a^b 取余p(divide and conquer)

传统的计算方法为循环n个a相乘。时间复杂度为O(n)。

如用分治算法,效率可提升至O(lgn)。

结合recursive有

double pow(int a, int n){
    if(n==0)
       return 1;
    if(n==1)
       return a;
    double t = pow(a,n/2);
    return t * t * pow(a,n%2);

}

也可用循环的方法

double pow(int a, int n){
    double res = 1;
    while(n){
         if(n%2==1)
            res =res * a;
         a = a* a;
         n/=2;  
    }
}

原文地址:https://www.cnblogs.com/klitech/p/5709716.html