zoukankan      html  css  js  c++  java
  • 2015年杭电计算机研究生复试的笔试题目:hdu1061(2015-N1):1.快速幂;2.找规律

    1.快速幂

    原理:求a的b次方,将b转化为二进制数,该二进制位第i位的权是2^(i-1),

    例如
    11的二进制是1011
    11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
    因此,我们将a¹¹转化为算
     
    实现
    快速幂可以用位运算来实现
    and 1{也就是取b的二进制最低位(即第0位) 判断b是否为奇数,是则为1}
    shr 1{就是去掉b的二进制最低位(即第0位)}
    C++实现为
    b & 1//取b二进制的最低位,判断和1是否相同,相同返回1,否则返回0,可用于判断奇偶
    b>>1//把b的二进制右移一位,即去掉其二进制位的最低位.
    递归版:
    ll pow(ll a,ll i){
      if (i==0) return 1;
      int temp=pow(a,i>>1);
      temp=temp*temp%MOD;
      if (i&1) temp=(ll)temp*a%MOD;
      return temp%MOD;
    }
    非递归版:
    ll f(ll a,ll b,ll n){
      int t,y;
      t=1; y=a;
      while (b!=0){
        if (b&1==1) t=t*y%n;
        y=y*y%n; b=b>>1;
      }
      return t;
     
    一生有所追!
  • 相关阅读:
    coredump分析
    Sword LRU算法
    C++ STL迭代器失效问题
    Sword DB主从一致性的解决方法
    Sword CRC算法原理
    C语言 按位异或实现加法
    Linux 等待信号(sigsuspend)
    C语言 宏定义之可变参数
    Linux shell字符串操作
    C++ *和&
  • 原文地址:https://www.cnblogs.com/BlueBlue-Sky/p/8490659.html
Copyright © 2011-2022 走看看