算法设计与分析(快速幂算法

news2025/1/10 10:55:18

目录

  • 1. 题目:
  • 2. 代码:
      • 2.1边界条件处理
      • 2.2分治策略
      • 2.3合并结果
      • 2.4递归终止条件
      • 2.5效率分析
  • 小结:

1. 题目:

在这里插入图片描述

2. 代码:

#include<iostream>
using namespace std;

int pow(int x, int n){
	// 边界条件 
	if (x == 0) return 0;					// 排除特殊情况 
	if (n == 0) return 1;					// 0次方等于1
	
	// 分、治 
	int exp2 = pow(x, n / 2);				// 计算 x^(n/2) 
	
	// 合 
	if (n % 2 == 1) return exp2 * exp2 * x;	// 奇数则返回 x^(n/2) * x^(n/2) * x
	else return exp2 * exp2;				// 偶数则返回 x^(n/2) * x^(n/2)
}

int main(){
	int x, n;
	cin >> x;
	cin >> n;
	
	cout << pow(x, n) << endl;
}

这里用到的是递归与分治的思想,只不过只计算了其中一个递归,也就是说时间复杂度为:

T(n) = T(n/2) + 1
计算得:T(n) = logn

主要写好 分、治、合 三个步骤即可

2.1边界条件处理

  • 如果 x 为 0,则直接返回 0,因为任何数的 0 次幂都是 1,但 0 的任何正整数次幂都是 0(这里处理的是 x 为 0 的特殊情况)。
  • 如果 n 为 0,则根据幂的定义,任何非零数的 0 次幂都是 1,因此返回 1。

2.2分治策略

函数通过递归调用自身来计算 xn/2 次幂,存储在变量 exp2 中。这一步是“分”的过程,即将原问题分解为规模更小但结构相似的子问题。

2.3合并结果

接下来,根据 n 的奇偶性来合并结果:

  • 如果 n 是奇数,则最终结果是 exp2 * exp2 * x,即 (x^(n/2))^2 * x。这是因为 x^n = (x^(n/2))^2 * xn 为奇数时。
  • 如果 n 是偶数,则最终结果是 exp2 * exp2,即 (x^(n/2))^2。这是因为 x^n = (x^(n/2))^2n 为偶数时。

2.4递归终止条件

除了上述的边界条件外,递归的终止还隐含在 n 不断减半的过程中。当 n 减小到 0 时,递归调用将返回 1,这是递归的基准情况。

2.5效率分析

这种分治方法的时间复杂度为 O(log n),因为它每次都将问题规模减半。与简单的迭代方法(如循环乘法)相比,这种方法在处理大指数时更加高效。

然而,需要注意的是,递归方法可能会消耗更多的栈空间,特别是当 n 非常大时。此外,由于递归深度可能很深,对于某些编译器或环境,可能存在栈溢出的风险。

小结:

关注我给大家分享更多有趣的知识,以下是个人公众号,提供 ||代码兼职|| ||代码问题求解||
添加我的公众号即可:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据技术——实战项目:广告数仓(第七部分)数仓工作流调度实操

目录 第12章 广告数仓全流程调度 12.2 新数据生成 12.2.1 广告监测日志 12.2.2 广告管理平台数据 12.3 工作流调度实操 12.3.1 DolphinScheduler集群模式 12.3.2 DolphinScheduler单机模式 第12章 广告数仓全流程调度 12.1 调度工具Dolphinscheduler DolphinScheduler…

鸿蒙HarmonyOS:应用程序开发与使用-延迟加载(lazy import)

随着应用程序功能的不断扩展&#xff0c;冷启动所需的时间显著增长&#xff0c;主要是由于在启动初期加载了大量模块&#xff0c;其中存在大量未被实际执行的冗余文件。这种情形不仅拖延了应用的初始化过程&#xff0c;还造成了资源的无效占用。亟需采取措施精简加载流程&#…

解决IDEA-HTTP状态500-内部服务器错误

目录 背景: 解决过程: MySQL的优点和缺点: 背景: 类型异常报告 消息无法打开Hibernate会话进行事务处理&#xff1b;嵌套异常是org.hibernate.exception.GenericJDBCException:无法连接 描述服务器遇到了意外情况&#xff0c;导致无法满足请求等等.... 在运行项目的时候&…

Linux中以单容器部署Nginx+ASP.NET Core

强烈推荐在生产环境中使用反向代理服务器转发请求到Kestrel Http服务器&#xff0c;本文将会实践将Nginx --->ASP.NET Core 部署架构容器化的过程。 Nginx->ASP.NET Coe部署架构容器化 在Docker中部署Nginx--->ASP.NETCore 有两种选择&#xff0c; 第一种是在单容器…

【Java】解析方法的调用关系

目录 一、方法的定义二、方法的声明格式三、方法的调用四、特殊方法&#xff1a;程序入口main方法五、方法的局部变量六、类的静态变量七、类的静态方法八、方法的传参九、方法的重载 一、方法的定义 方法就是 将功能重复的代码封装成一段独立的代码&#xff0c;通过调用方法的…

Element Plus的el-carousel走马灯平铺多张图片

效果 <template><div class"system-banner"><el-carousel height"320px" indicator-position"outside" :autoplay"false"><el-carousel-item v-for"(item, index) in govList" :key"index"…

「VLM」CLIP 文本与图像的桥梁

github&#xff1a;https://github.com/OpenAI/CLIP paper&#xff1a;Learning Transferable Visual Models From Natural Language Supervision CLIP全称&#xff1a;Contrastive Language-Imge Pre-training&#xff0c;即对比语言-图像预训练。 对比学习是一种更关注于学习…

SD卡无法读取怎么办?4个修复方法千万别错过

SD卡是我们生活中常见的存储设备之一&#xff0c;它小巧方便&#xff0c;容量适中&#xff0c;被广泛应用于数码相机、手机、平板等设备中&#xff0c;随着时间的增长&#xff0c;有时会遇到突然无法读取的问题&#xff0c;这不仅会影响我们的数据访问&#xff0c;还可能造成数…

idea 中的properties文件中文乱码

如遇到以下类似的问题&#xff1a; 配置setting中-》Editor-》File Encodings 中&#xff0c;将以下三处位置的编码格式进行修改 Global Encoding GBK Project Encoding GBK Default encoding for properties files UTF-8 修改之后文件的中文显示正常

MySQl 中对数据表的增删改查(基础)

MySQl 中对数据表的增删改查&#xff08;基础&#xff09; 新增演示插入一条数据插入多条数据 查询全列查询部分列查询查询关于列名的表达式查询时用别名查询去重后的结果查询排序后的结果条件查询比较运算符和逻辑运算符 分页查询 修改删除 黑白图是在命令行里的&#xff0c;彩…

【题解】【枚举】—— [NOIP1997 普及组] 棋盘问题

【题解】【枚举】—— [NOIP1997 普及组] 棋盘问题 [NOIP1997 普及组] 棋盘问题题目背景题目描述输入格式输出格式输入输出样例输入 #1输出 #1 解法1解法2 [NOIP1997 普及组] 棋盘问题 戳我查看题目&#xff08;洛谷&#xff09; 题目背景 NOIP1997 普及组第一题 题目描述 …

Java基础 文字小游戏

souf System.out.printf("你好啊%s","张三") 输出你好啊张三 System.out.printn()放在中间可以换行 System.out.printf("%s你好啊%s","张三","李四") 输出 张三你好啊李四 只有输出没有换行效果。 制作一个文字小游戏…

每期一个小窍门: Goland 配置跳板机登陆

写简单点 先说下大概流程 本地 访问 localhost:6000 --> 转发到跳板机:22 --> 再转发到指定内网地址 本机 .ssh/config Host *ControlPersist yesControlMaster autoControlPath ~/.ssh/%n:%p本机公钥 copy 到跳板机 和内网被跳机 本机命令 ssh -N -f -L 6000:<内…

Linux基础入门---安装vmware

&#x1f600;前言 本篇博文是关于Linux基础入门和vmwarel5.5下载&#xff0c;希望你能够喜欢。 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动…

告别繁琐ppt制作,用这5款AI工具,一键生成轻松搞定!

在云办公逐渐成为主流的当下&#xff0c;许多职场人士在办公时会首选各类在线应用&#xff0c;最常见的就是在线制作PPT、在线编辑文档、在线编辑表格或智能表格&#xff0c;除此之外&#xff0c;这两年AI人工智能技术的发展&#xff0c;也诞生了许多能一键生成PPT的AI工具。 …

队列的实现及循环队列

一、队列的概念及结构 队列只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表。队列具有先进先出FIFO&#xff08;Fist In First Out&#xff09;。 入队列&#xff1a;进行插入操作的一端称为队尾。 出队列&#xff1a;进行删除操作的一端称为…

nestjs 大笔记(连载中)

安装 npm i -g nestjs/cli nest new project-name快捷指令 nest g mo xxx # 生成 Module nest g co xxx # 生成 Controller nest g s xxx # 生成 Service nest g resource xxx # 生成一套Restful风格接口

PCIe板卡辅助信号解析

1.简介 PCIe Add-in卡借助PCIe插槽上的辅助信号&#xff0c;实现了很多系统级的功能&#xff0c;比如唤醒、复位、调试、热插拔等功能。具体的辅助信号有REFCLK-/REFCLK、PERST#、WAKE#、SMBCLK、SMBDAT、JTAG、CLKREQ#及PRSNT1#和PRSNT2#等&#xff0c;具体的作用如下&#x…

Facebook国内企业户、海外户、国内二不限户以及三不限户区别何在?

Facebook广告账户的类型和设置对于企业在不同市场中的广告活动至关重要。了解国内企业户、海外企业户&#xff0c;以及国内二不限户和三不限户的区别&#xff0c;可以帮助你更好地选择和管理广告账户。以下是对这些账户类型的详细解析。 一、Facebook海外企业广告账户 海外企业…

kettle的Javascript组件获取T-1天和T+1天

// 获取T-1的时间 var currentDate new Date(); currentDate.setDate(currentDate.getDate() - 1); var currentYear currentDate.getFullYear(); var currentMonth (0 (currentDate.getMonth() 1)).slice(-2); var currentDay (0 currentDate.getDate()).slice(-2); va…