快速幂 算法学习笔记
快速幂 学习笔记
文章目录
- 快速幂 学习笔记
- 概念与使用缘由
- 两种方法
- 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。
综上,就是快速幂的位运算方法。
快速幂 算法学习笔记相关推荐
- 数据结构与算法学习笔记4:递归+分治法
数据结构与算法学习笔记4 递归 斐波那契数列 青蛙跳台阶问题 链表倒序打印 分治法 二分查找/折半查找 Binary Search 题目1:快速幂 题目2:如何判断一个数是否为2的次幂 递归 指在函数 ...
- Python最优化算法学习笔记(Gurobi)
微信公众号:数学建模与人工智能 github地址:https://github.com/QInzhengk/Math-Model-and-Machine-Learning Python最优化算法学习笔 ...
- 数学建模算法学习笔记
数学建模算法学习笔记 作为建模Man学习数学建模时做的笔记 参考文献: <数学建模姜启源第四版> 网上搜罗来的各种资料,侵删 1.线性预测 levinson durbin算法,自相关什么的 ...
- 刘海洋 · LaTeX 不快速的入门 学习笔记
刘海洋 · LaTeX 不快速的入门 学习笔记 网址链接 : 刘海洋 · LaTeX 不快速的入门 - 跟着大神学习最纯正的 LaTeX 知识 一.组织文档结构 1. 文档基本结构 以document ...
- 基于MVS的三维重建算法学习笔记(一)— MVS三维重建概述与OpenMVS开源框架配置
基于MVS的三维重建算法学习笔记(一)- MVS三维重建概述与OpenMVS开源框架配置 声明 1. MVS(Multi-view stereo)概述 稀疏重建与稠密重建的区别 稀疏重建--SFM(S ...
- Python快速编程入门#学习笔记03# |第二章 :Python基础(代码格式、标识符关键字、变量和数据类型、数字类型以及运算符)
全文目录 ==先导知识== 学习目标: 2.1 代码格式 2.1.1 注释 2.1.2 缩进 2.1.3 语句换行 2.2 标识符和关键字 2.2.1 标识符 2.2.2 关键字 2.3 变量和数据类 ...
- Python预测 数据分析与算法 学习笔记(特征工程、时间序列)
微信公众号:数学建模与人工智能 GitHub - QInzhengk/Math-Model-and-Machine-Learning 第3章 探索规律 3.1 相关分析 相关关系是一种与函数关系相区别 ...
- 基于MVS的三维重建算法学习笔记(四)— 立体匹配经典算法Semi-Global Matching(SGM)论文翻译及要点解读
基于MVS的三维重建算法学习笔记(四)- 立体匹配经典算法Semi-Global Matching(SGM)论文翻译及要点解读 声明 SGM概述 Cost Calculation(像素代价计算)--M ...
- (快速幂算法+高精度)洛谷P1045 麦森数
前言 故事的最后,让我们以一道十分经典的题目--<麦森数>来结尾.接受现实吧,总会有我们没准备过的高精度运算出现.我们固然可以提前把高精度的快速幂模板也准备好,但是总会有百密一疏的时候 ...
最新文章
- 前端面试的作品示例_如何回答任何技术面试问题-包括示例
- ASP.NET 网速慢时候按钮禁止重复提交
- 100. Same Tree (Tree;DFS)
- 在.net 应用MD5加密
- Linux 如何打开pyo文件,Python的文件类型
- 计算机毕业设计django基于python药房药品管理系统(源码+系统+mysql数据库+Lw文档)
- windows winrar 指令_WINRAR 命令行语法
- 地砖中间高四边低_客厅棚顶有黑镜在风水里讲怎么样 装修中橱柜里的白色色块用哪个做,怎么施工...
- 社会网络分析中的基本概念
- 基于[三星6818]芯片超声波测距驱动编写
- 基于java的自驾游自助游旅游网站
- 主流车品牌魅力指数榜别克、东风日产、一汽丰田列前三;亚航推出东盟超级应用平台 | 美通企业日报...
- Linux下怎么进入波浪线目录,linux 波浪线 ~ 使用方法
- P3387ybtoj【图论】4章1题【【模板】缩点】
- GA-BP遗传神经网络预测
- opencv图片旋转90°/-90°/180°
- 如何使用iTerm2+oh-my-zsh+Dracula美化你的MAC终端
- klayout 源码分析系列续 执行脚本
- Your endpoint configuration is wrong
- 爬虫获取天气预报并可视化