首页 > 编程语言 > 详细

算法之数字运算

时间:2020-03-23 21:04:25      阅读:64      评论:0      收藏:0      [点我收藏+]

一、快速幂

(1)普通算法:求a^b%m的时间复杂度为O(b)

(2)快速幂:求a^b%m的时间复杂度为O(logb)

  比喻:我们已知 2^3  求 2^6,不就是 2^3 * 2^3嘛。快速幂就是这个原理;当遇到奇数时2 ^ 5,就是 2 * 2 ^ 4 。

  求a ^ b快速幂的基本思路:

    1)当b是奇数时,那么有 a^b = a * a^*(b-1)

    2)当b是偶数时,那么有 a^b = a^(b/2) * a^(b/2)

    如:2^10 = 2^5 * 2^5

      2^5 = 2 * 2^4

      2^4 = 2^2 * 2^2

      2^1 = 2 * 2^0

  求 a^b%m

//暗指int为长整型
public int fun(int a,int b,int m){
    int ans=1;
    while(b>0){
        //位与&运算要比%运算要快  
        if(1==(b&1)){
            ans=ans*a%2;
        }
        a=a*a%2;
        b=b>>1;
    }
    return ans;
}

二、java的左移与右移

  左移代表乘,左移一位代表乘2,左移两位代表乘4,依次递增           12<<1=24    12<<2=48 

  右移代表除,  右移一位代表除2,右移两位代表除4,依次递增            12>>1=6      12>>2=3

  System.out.println(12>>2)//结果为3

  System.out.println(12<<1)//结果为1

算法之数字运算

原文:https://www.cnblogs.com/hdc520/p/12554989.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!