zoukankan      html  css  js  c++  java
  • 快速幂

    快速幂顾名思义,就是快速算某个数的多少次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。

    原理:

      以下以求a的b次方来介绍

      把b转换成二进制数
        如:a¹¹ = a^(2º+2¹+2³)
        11的二进制是1011
        11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
        因此,我们将a¹¹转化为算  a^2º × a^2¹ × a^2³
    代码比较:
      常规求幂
    1 int pow1(inta,intb){
    2     int ans=1;
    3     while(b--)
    4         ans*=a;
    5     return ans;
    6 } 
    View Code

      二分求幂(一般)

     1 int pow2(inta,intb){
     2     int ans=1 , temp=a;
     3     while(b){
     4            if(b%2)
     5             ans*=temp;
     6         temp*=temp;
     7         b/=2;
     8     }
     9     return ans;
    10 }
    View Code

      快速求幂(位操作)

     1 int pow3(inta,intb){
     2     int ans = 1 , temp = a ;
     3     while(b){
     4         if(b&1)     //b%2 = b&1
     5             ans*=temp;
     6         temp*=temp;
     7         b>>=1;        //b/2 = b>>1 
     8     }
     9     return ans;
    10 }
    View Code

     

  • 相关阅读:
    博客样式备份
    2018年终总结
    技术博客的太监
    LeetCode 日常填坑
    互联网之父
    TotoiseSVN的使用方法
    常用CMD命令
    量化策略
    浏览器加载js的阻塞与非阻塞
    Vue核心之数据劫持
  • 原文地址:https://www.cnblogs.com/My-Sunshine/p/4868786.html
Copyright © 2011-2022 走看看