zoukankan      html  css  js  c++  java
  • 快速幂【倍增+二分】

    快速幂就是快速算底数的n次幂。其时间复杂度为 O(logN), 与朴素的O(N)相比效率有了极大的提高。

    例如
    11的二进制是1011
    11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
    因此,我们将a¹¹转化为算


    常规求幂:

    int pow0(int a,int b){
       int r=1;
       while(b--) r*=a;
       return r;
    } 

    倍增法快速求幂:

    int pow1(int a,int b){
        int r=1,base=a;//初始r等于2的零次方,base等于a的2的零次方
        while(b){
            if(b&1) r*=base;
            base*=base;
            b>>=1;
        }
        return r;
    }


    二分法快速求幂:

    LL f(int x,int n){
        if(n==0) return 1;
        else if(n==1) return x;
        else{
            LL sub_res=f(x,n/2);
            res = sub_res*sub_res;
            if(n%2==1) res*=x;
        }
        return res;
    }


  • 相关阅读:
    模板语法 DTL(Django Template Language )
    django基础
    day1,基本标签总结
    聚合函数
    day1
    day 3 定时任务
    day 4 tar
    day 6
    day1 mysql
    day 6
  • 原文地址:https://www.cnblogs.com/kzbin/p/9205258.html
Copyright © 2011-2022 走看看