算法基础-快速幂 | 蓝桥杯

简单说两句

作者:后端小知识CSDN后端领域新星创作者|阿里云专家博主

CSDN个人主页:后端小知识

🔎GZH后端小知识

🎉欢迎关注🔎点赞👍收藏⭐️留言📝

在这里插入图片描述

好的,亲爱的友友们,今天我们来讲解一个能提高幂运算效率的算法,他是什么呢?🧐没错,就是快速幂😎

概念

老规矩还是先看下概念

快速幂(Exponentiation by Squaring)是一种高效计算大整数乘方的算法,它利用了分治法的思想。这种方法的主要优势在于它减少了乘法运算的次数,从而提高了计算效率。

快速幂算法的时间复杂度为 O(log b),其中 b 是指数。这使得它在处理大整数乘方时比传统的 O(b) 算法更高效。这种方法在计算机科学和密码学领域有广泛的应用,如模幂运算、大数乘法等。

思路

快速幂算法的基本步骤:

先学下概念:a^b,底数是a,指数是b

  1. 如果指数为偶数,那么将底数平方,然后继续计算指数的一半。例如,计算 a^b 时,如果 b 是偶数,那么计算 (a*a)^(b/2)
  2. 如果指数为奇数,那么先计算 a^(b-1),然后再乘以底数 a。例如,计算 a^b 时,如果 b 是奇数,那么就是计算 a*a^(b-1)
  3. 重复以上步骤,直到指数为1。此时,结果就是底数 a 的指数次幂。

我们举个实际的例子吧

计算:3^10

常规做法

答案 = 3x3x3x3… 10个三相乘,代码层面相当于循环10次,代码就不写了哈,很简单

快速幂做法

指数10为偶数:

3^10 = (32)5 = 9^5

指数5为奇数

9^5 = 9x9^4

指数4为偶数

9x9^4 = 9x(92)2

指数2为偶数

9x(92)2 = 9x(81)^2 = 9x(812)1

指数为1,结束运算

连起来就是

3^10 =9^5 = 9x9^4 = (9x81)^2 = 9x(812)1

这样下来好像就运算了 4 次,是不是比前面算得快呢😎

代码实现

快速幂代码实现

#include<bits/stdc++.h>
using namespace std;
int a,n;
int quick(int a,int n){int ans = 1;while(n){//判断是不是奇数 if(n&1) ans *= a;a*=a;//相当于 n = n/2 n>>=1;}return ans;
}
int main(){int ans = quick(2,10);cout<<ans;return 0;
}

如果 数据量大的话,需要求余,就用同余做法

【ps】:中午时间不多,写得简洁,若有疑问,请留言,有空一定给解答

【都看到这了,点点赞点点关注呗,爱你们】😚😚

抽象工厂  引导关注

结语

谢谢你的阅读,由于作者水平有限,难免有不足之处,若读者发现问题,还请批评,在留言区留言或者私信告知,我一定会尽快修改的。若各位大佬有什么好的解法,或者有意义的解法都可以在评论区展示额,万分谢谢。
写作不易,望各位老板点点赞,加个关注!😘😘😘

💬

作者:后端小知识CSDN后端领域新星创作者|阿里云专家博主

CSDN个人主页:后端小知识

🔎GZH后端小知识

🎉欢迎关注🔎点赞👍收藏⭐️留言📝

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/229662.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2020年10月20日 Go生态洞察:Go开发者调查报告分析

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

ringboot-cve_2021_21234:latestSpring Boot 目录遍历 (CVE-2021-21234)漏洞复现

Spring Boot 目录遍历 &#xff08;CVE-2021-21234&#xff09;漏洞复现 Spring-boot-actuator-logview 0.2.13之前版本存在路径遍历漏洞&#xff0c;攻击者可通过该缺陷读取系统任意文件。 名称: Spring Boot 目录遍历 &#xff08;CVE-2021-21234&#xff09; 描述: Sprin…

数据结构之二叉树与堆以及力扣刷题函数扩展

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力 目录 1.前言 2.树 2.1概念 2.2树的相关概念 3.…

微信小程序本地和真机调试文件上传成功但体验版不成功

可能是微信小程序ip白名单的问题&#xff0c;去微信公众平台&#xff08;小程序&#xff09;上设置小程序的ip白名单 1、在本地中取消不校验 然后在本地去上传文件&#xff0c;就会发现控制台报错了&#xff0c;会提示一个https什么不在ip白名单&#xff0c;复制那个网址 2、…

Spring Boot实现热部署

Spring Boot提供了一个名为spring-boot-devtools的开发工具&#xff0c;它可以实现热部署功能。通过使用spring-boot-devtools&#xff0c;可以在修改了resources目录下的内容后&#xff0c;自动重新加载应用程序&#xff0c;而无需手动重启。 以下是使用spring-boot-devtools…

meta quest2激活配对、开发者模式、设置sidequest下载应用过程记录

最近因学习需求&#xff0c;需要从sidequest上下载一些VR应用到meta quest2里。但是由于一些大家都知道的原因&#xff0c;quest2并不能正常联网。quest2到手后&#xff0c;本VR小白摸索了半天&#xff0c;最终成功解决激活配对、设置开发者模式、从sidequest上下载应用等问题。…

Android自定义瀑布流文字展示

在历史搜索功能中&#xff0c;我们常用到一个瀑布流展示控件&#xff0c;用来展示我们的搜索记录&#xff0c;所以就自定义一个吧&#xff01; 布局中代码示例 <com.example.mymodularization.measure.LinearCustomandroid:id"id/ll"android:layout_width"wr…

教师如何备课,上好一堂课

作为一名教师&#xff0c;备课是上好一堂课的关键。备课不仅仅是准备教材和教具&#xff0c;更是制定教学计划、设计教学方法、预测学生学习效果的重要环节。接下来我分享几点备课和上课的心得。 深入理解教学大纲 教学大纲是备课的指导性文件&#xff0c;只有深入理解教学大纲…

视图层、模板(补充)

视图层 响应对象 响应---》本质都是 HttpResponse HttpResponse---》字符串render----》放个模板---》模板渲染是在后端完成 js代码是在客户端浏览器里执行的模板语法是在后端执行的redirect----》重定向 字符串参数不是是空的状态码是 3开头JsonResponse---》json格式数据 …

uniApp应用软件在运行时,未见向用户告知权限申请的目的,向用户索取(存储、相机、电话)等权限,不符合华为应用市场审核标准。

根据应用市场审核标准。我们开发的软件想要过审就必须要在应用在运行时&#xff0c;向用户告知权限申请的目的&#xff0c;向用户索取&#xff08;存储、相机、电话&#xff09;等权限&#xff01;&#xff01; 但是我们会发现做了提示弹框后又会驳回弹窗评频繁弹窗等等一系列…

JDK8升级JDK11最全实践干货来了

1、前言 截至目前&#xff08;2023年&#xff09;&#xff0c;Java8发布至今已有9年&#xff0c;2018年9月25日&#xff0c;Oracle发布了Java11&#xff0c;这是Java8之后的首个LTS版本。那么从JDK8到JDK11&#xff0c;到底带来了哪些特性呢&#xff1f;值得我们升级吗&#x…

【算法】FFT-1(递归实现)(不包括IFFT)

FFT 多项式多项式乘法复数及运算导数泰勒公式及展开式欧拉公式单位根 FFTCode IFFT 多项式 我们从课本中可以知道&#xff0c;一个 n − 1 n-1 n−1 次的多项式可以写成 a 0 a 1 x a 2 x 2 a 3 x 3 ⋯ a n − 1 x n − 1 a_{0}a_{1}xa_{2}x^2a_{3}x^3\dotsa_{n-1}x^{n-…