快速幂

  • 概念背景
    • 方法
      • 分治法求取
      • 非递归求取

概念背景

概念
快速幂,顾名思义,即是快速算底数的n次幂,其时间复杂度为 O(log₂N)。
背景
在没有用快速幂之前,有多种方法去算a的b次方再对c取余,比如像直接用pow(a,b)再去对c取余,但如果a或b稍微再大些,那么得出的结果就会很大,很有可能在运行框中输出的结果是错误的,就像这样:

所以我们就有快速幂这种方法来使得避免这种情况。

方法

分治法求取

分奇偶性求取(递归):

f ( n ) = { p o w ( a , b / 2 ) 2 , n 为奇数 p o w ( a , b / 2 ) 2 ∗ a , n 为偶数 f(n) = \begin{cases} pow(a,b/2)^2, & \text{ $n$ 为奇数} \\ pow(a,b/2)^2*a, & \text{ $n$为偶数} \\ \end{cases} f(n)={pow(a,b/2)2,pow(a,b/2)2∗a,​ n 为奇数 n为偶数​
递归边界:当b=0时, x 0 x^0 x0=1,这时直接返回1即可,用此方法实现时,记得要存储算过的值,不要重复计算重复调用。

typedef long long ll;
int Pow(ll a,ll b,ll mod)
{if(b==0) return 1;ll t;t=pow(a,b/2);if(b&1)//b是奇数{return t*t%mod*a%mod;}else{return t*t%mod;}
}

非递归求取

利用二进制,我们知道将一个二进制数转化为十进制数要从右到左用二进制的每个数去乘以2的相应次方,或者把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。如图:

通过这个思路我们可以把b用二进制表示,然后从后往前遍历二进制的每一位,假设改二进制位有1,则让答案乘上 a 2 k a^{2k} a2k,为啥是乘呢,如图:

代码:

ll ksm(ll x,ll n,ll mod)
{ll ret=1;while(n>0){if(n&1)ret=(ret*x)%mod;x=(x*x)%mod;n>>=1;}return ret;
}

好了,关于快速幂就学习到这里,如有错误,敬请指正,祝大家学习愉快!

快速幂基础知识(重温学习笔记)相关推荐

  1. Python基础知识_学习笔记(20200629更新)

    Python学习笔记 本人跟随pythonav武老师视频课学习 侵权删! 瞎哔哔区: 2020-04-19:跟随武老师视频整理了第一版笔记,计划每周末都将这一周的学习笔记整理出来,供大家分享讨论 20 ...

  2. linux基础知识复习学习笔记

    其实有些东西长久不用就会忘记 疫情期间被隔离在家,把一些基础再复习一下,希望自己能够加深记忆. #20220108-RPM 20220109-yum包管理 20220110-用户组 20220111- ...

  3. 基础知识---汇编学习笔记

    第一章 1.1 机器语言 电子计算机的机器指令是一列二进制数字.计算机将之转变成一列高低电平,以使计算机的电子器件受到驱动,进行运算. 1.2 汇编语言的产生 在这里我们发现一个问题:用0和1来描述程 ...

  4. html表单基础知识,【学习笔记】html基础知识第四更/与用户交互!(表单标签)...

    使用表单标签--与用户交互 网站怎样与用户进行交互? 答案是使用HTML表单(form). 表单可以把浏览者输入的数据传送到服务器端,这样服务器端程序就可以处理表单传过来的数据. 语法: 讲解: 1. ...

  5. CGAL 基础知识(学习笔记)

    文章目录 一.简介 二.鲁棒性 三.内核表示 四.谓语与构造 五.小结 参考资料 一.简介 CGAL,是一个C++计算几何算法库,其由三个主要部分组成.第一部分是内核(kernal),它由不变大小不可 ...

  6. python---pandas基础知识(学习笔记)

    pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入 了大量库和一些标准的数据模型,提供了高效地操作大型结构化数据集所需的工具. import panda ...

  7. 《uniapp基础知识》学习笔记Day38-(Period2)全局文件一些常用的配置

    如果进行开发的话,首先要配置路由页面 page.json 页面路由 pages.json 文件用来对 uni-app 进行全局配置,决定页面文件的路径.窗口样式.原生的导航栏.底部的原生tabbar ...

  8. 计算机网络基础知识 帮助学习网络管理的初学者快速了解网络管理的初步结构知识...

    网络分层: OSI七层协议:物理层.数据链路层.网络层.运输层.会话层.表示层.应用层 五层协议:物理层.数据链路层.网络层.运输层.应用层 HTTP四层协议:网络接口层.网际层.运输层.应用层 层 ...

  9. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

最新文章

  1. python免费入门_python入门 2018最新最全学习资料免费获取啦
  2. 核心概念——节点/边/Combo——内置节点——Diamond
  3. 猜字游游戏,while执行10次(Python)
  4. PCB 机器学习(ML.NET)初体验实现PCB加投率预测
  5. php vue联动查询,使用vue.js实现联动效果的示例代码
  6. setitimer用法说明
  7. java json html模板,基于jQuery的AJAX和JSON实现纯html数据模板(转载)
  8. python 最小二乘回归 高斯核_机器学习技法6-(支持向量回归)
  9. linux下嵌入式编译环境搭建,ubuntu系统下嵌入式开发环境搭建(ubuntu 16.04)
  10. ubuntu php 错误,Ubuntu下如何开启PHP错误提示教程
  11. linux debug tools
  12. 2018 KDD CUP支付宝安全团队Deep X斩获两项大奖
  13. [转]什么是UAT测试?
  14. 汉字编码:区位码、国标码、机内码
  15. Linux下怎么刷显卡bios,nvidia显卡如何刷bios?nvidia显卡刷bios教程
  16. cpu天梯图2022年11月 cpu排行榜天梯图2022
  17. 使用免费小图标(趣味)
  18. 如何使用Apple Watch解锁iPhone和Mac?
  19. 2021好看的新年雪花飘倒计时单页网站源码分享
  20. C#快递跟踪(基于快递100深度定制)

热门文章

  1. Win10下ME511刷安卓2.3.7(CM7)
  2. 最好不要和程序员谈恋爱
  3. JavaScript基础知识(—)
  4. 网络安全面试的HTTPS问题_HTTPS原理剖析
  5. mysql命令行登录 端口_Mysql命令行常用操作
  6. 打造安全的App!iOS安全系列之 HTTPS 进阶
  7. IDEA maven打包项目到阿里云服务器Tomcat部署流程
  8. jquery 数组 操作函数
  9. 获得认证标志证书VMC教程
  10. 一入Java 深似海