快速幂 学习笔记

文章目录

  • 快速幂 学习笔记
    • 概念与使用缘由
    • 两种方法
      • 1.用位运算的方法
        • 位运算原理
        • 位运算所需要用到的运算符
        • 主程序如下:
        • 程序解析

概念与使用缘由

快速幂,顾名思义,就是用比一个一个相乘更快、更节约时间的求幂次的方法。
比如求24,如果把2乘4次,那么时间复杂度就是O(4),而如果用快速幂,时间复杂度会变成O(log24)即为O(2)。

两种方法

1.用位运算的方法

位运算原理

按位运算,就是把a^b中的b转化成二进制的形式,比如:
25 把5转化成二进制,即为2^(2 ^ 0+2 ^ 2) 也就是 21*24
相比之前的25 需要运算5次,用快速幂的方法就只运算了2次。

位运算所需要用到的运算符

>> :右移。 a>>b 功能是将运算的数字a的二进制数向右移b位。
右移b位就是除以2的b次方。
例如:b = 10>>2 那么>>运算是这样的 :
10 : 00001010
10>>2:00000010
b:00000010
故b为2。

& :按位与。a&b 功能是参与运算的两数各对应的二进位相与。
例如:z = 3 & 10 那么&运算是这样的 :
3 : 00000011
10:00001010
z : 00000010
故z为2。

主程序如下:
#include<stdio.h>
int main() {int a, b;scanf("%d %d", &a, &b);    //求a^bint ans=1;while(b!=0){if(b&1) {ans*=a;}b>>=1;a*=a;}printf("%d\n",ans);
}

其中,这一串代码就是按位运算快速幂

 int ans=1;while(b!=0){if(b&1) {ans*=a;}b>>=1;a*=a;}
程序解析

首先判断幂次b是否为0,当不是0的时候才进行位运算。
进行判断b&1的判断,若为真,则代表了此时的幂次b是奇数,而快速幂的位运算是建立在幂次是偶数的情况下进行的,所以我们用ans存储多乘的那一次,而后把b的二进制数向右移一位,即把ab 整体除以2的1次方,但是这样是不行的,所以我们把a *= a,相当于把a变成了a2,这样总体就不会改变了。
接下来的的运算过程,我们举211为例:
第1次循环:因为b是11,为奇数,所以
ans = 2;
211 = 45 * ans;

第2次循环:因为b是5,为奇数,所以
ans = 2 * 4 = 8;
211 = 162 * ans;

第3次循环:因为b是2,为偶数,所以
ans =8 ;
211 = 2561 * ans;

第4次循环:因为b是1,为奇数,所以
ans =8 * 256 = 2048 ;
211 = 655360 * ans;

此时,b==0,所以退出循环,输出结果ans。

综上,就是快速幂的位运算方法。

快速幂 算法学习笔记相关推荐

  1. 数据结构与算法学习笔记4:递归+分治法

    数据结构与算法学习笔记4 递归 斐波那契数列 青蛙跳台阶问题 链表倒序打印 分治法 二分查找/折半查找 Binary Search 题目1:快速幂 题目2:如何判断一个数是否为2的次幂 递归 指在函数 ...

  2. Python最优化算法学习笔记(Gurobi)

    微信公众号:数学建模与人工智能 github地址:https://github.com/QInzhengk/Math-Model-and-Machine-Learning Python最优化算法学习笔 ...

  3. 数学建模算法学习笔记

    数学建模算法学习笔记 作为建模Man学习数学建模时做的笔记 参考文献: <数学建模姜启源第四版> 网上搜罗来的各种资料,侵删 1.线性预测 levinson durbin算法,自相关什么的 ...

  4. 刘海洋 · LaTeX 不快速的入门 学习笔记

    刘海洋 · LaTeX 不快速的入门 学习笔记 网址链接 : 刘海洋 · LaTeX 不快速的入门 - 跟着大神学习最纯正的 LaTeX 知识 一.组织文档结构 1. 文档基本结构 以document ...

  5. 基于MVS的三维重建算法学习笔记(一)— MVS三维重建概述与OpenMVS开源框架配置

    基于MVS的三维重建算法学习笔记(一)- MVS三维重建概述与OpenMVS开源框架配置 声明 1. MVS(Multi-view stereo)概述 稀疏重建与稠密重建的区别 稀疏重建--SFM(S ...

  6. Python快速编程入门#学习笔记03# |第二章 :Python基础(代码格式、标识符关键字、变量和数据类型、数字类型以及运算符)

    全文目录 ==先导知识== 学习目标: 2.1 代码格式 2.1.1 注释 2.1.2 缩进 2.1.3 语句换行 2.2 标识符和关键字 2.2.1 标识符 2.2.2 关键字 2.3 变量和数据类 ...

  7. Python预测 数据分析与算法 学习笔记(特征工程、时间序列)

    微信公众号:数学建模与人工智能 GitHub - QInzhengk/Math-Model-and-Machine-Learning 第3章 探索规律 3.1 相关分析 相关关系是一种与函数关系相区别 ...

  8. 基于MVS的三维重建算法学习笔记(四)— 立体匹配经典算法Semi-Global Matching(SGM)论文翻译及要点解读

    基于MVS的三维重建算法学习笔记(四)- 立体匹配经典算法Semi-Global Matching(SGM)论文翻译及要点解读 声明 SGM概述 Cost Calculation(像素代价计算)--M ...

  9. (快速幂算法+高精度)洛谷P1045 麦森数

    前言   故事的最后,让我们以一道十分经典的题目--<麦森数>来结尾.接受现实吧,总会有我们没准备过的高精度运算出现.我们固然可以提前把高精度的快速幂模板也准备好,但是总会有百密一疏的时候 ...

最新文章

  1. 前端面试的作品示例_如何回答任何技术面试问题-包括示例
  2. ASP.NET 网速慢时候按钮禁止重复提交
  3. 100. Same Tree (Tree;DFS)
  4. 在.net 应用MD5加密
  5. Linux 如何打开pyo文件,Python的文件类型
  6. 计算机毕业设计django基于python药房药品管理系统(源码+系统+mysql数据库+Lw文档)
  7. windows winrar 指令_WINRAR 命令行语法
  8. 地砖中间高四边低_客厅棚顶有黑镜在风水里讲怎么样 装修中橱柜里的白色色块用哪个做,怎么施工...
  9. 社会网络分析中的基本概念
  10. 基于[三星6818]芯片超声波测距驱动编写
  11. 基于java的自驾游自助游旅游网站
  12. 主流车品牌魅力指数榜别克、东风日产、一汽丰田列前三;亚航推出东盟超级应用平台 | 美通企业日报...
  13. Linux下怎么进入波浪线目录,linux 波浪线 ~ 使用方法
  14. P3387ybtoj【图论】4章1题【【模板】缩点】
  15. GA-BP遗传神经网络预测
  16. opencv图片旋转90°/-90°/180°
  17. 如何使用iTerm2+oh-my-zsh+Dracula美化你的MAC终端
  18. klayout 源码分析系列续 执行脚本
  19. Your endpoint configuration is wrong
  20. 爬虫获取天气预报并可视化

热门文章

  1. js控制元素隐藏和显示
  2. Git最新教程通俗易懂----狂神说Java -- ---学习笔记
  3. zdm各命令的功能和作用_ZDM命令 注释.doc
  4. 使用OpenCV4.1对连通域的计数和面积计算
  5. 如何调整Linux系统为正确时区
  6. 【企业网站模板】企业网站模板平台建站教程
  7. echarts取消绑定
  8. 20到50之间是3的倍数php,小学三年级奥数-第16讲-数字趣谈(教)
  9. 手把手教你用python爬虫带你玩转日系P站,超详细教学
  10. 批处理之copy与xcopy拷贝文件详解