Pow(x,n)快速冥算法

news2024/10/6 3:30:16

快速幂算法

快速幂算法是一种通过分治和递归的方式来计算幂运算的方法,其核心思想是利用分治和递归减少乘法的次数来显著提高效率。

在这里插入图片描述

在这里插入图片描述

基本原理:

在这里插入图片描述

给定 xn,计算 x^n 的过程如下:

  • 基本情况处理:如果指数 n0,直接返回 1.0
  • 递归计算
    • 计算 x^(n/2),即 half
    • 如果 n 是偶数,x^n = (x^(n/2))^2 = half * half
    • 如果 n 是奇数,x^n = x * x^(n-1) = half * half * x
      通过递归地将指数 n 分解为更小的指数,从而减少了乘法的次数,达到了快速计算幂的效果。
代码实现(Java):

在这里插入图片描述

class Solution {
    // 主函数,计算 x 的 n 次幂
    public double myPow(double x, int n) {
        // 如果 x 是 0 或者 1,直接返回 x
        if (x == 0 || x == 1) return x;
        
        // 如果 n 是负数,返回 x 的 -n 次幂的倒数
        if (n < 0) {
            return 1 / myHelper(x, -n);
        } else { // 如果 n 是非负数,直接调用 myHelper 计算 x 的 n 次幂
            return myHelper(x, n);
        }
    }

    // 辅助函数,使用递归和分治算法计算 x 的 n 次幂
    public double myHelper(double x, int n) {
        // 基本情况:任何数的 0 次幂都是 1
        if (n == 0) return 1;
        
        // 基本情况:任何数的 1 次幂都是它本身
        if (n == 1) return x;
        
        // 递归计算 x 的 n/2 次幂
        double half = myHelper(x, n / 2);
        
        // 如果 n 是偶数,x^n = (x^(n/2))^2
        if ((n & 1) == 0) {
            return half * half;
        } else { // 如果 n 是奇数,x^n = x * (x^(n/2))^2
            return half * half * x;
        }
    }
}


在这里插入图片描述

利用递归和分治的方法,快速幂算法可以在 O(log n) 的时间复杂度内完成指数运算,比朴素的循环逐步相乘要高效得多。

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

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

相关文章

【STM32修改串口波特率】

STM32微控制器中的串口波特率调整通常涉及到USART&#xff08;通用同步接收器/发送器&#xff09;模块的配置。USART模块提供了多个寄存器来设置波特率&#xff0c;其中关键的寄存器包括BRR&#xff08;波特率寄存器&#xff09;和USART_CR1&#xff08;控制寄存器1&#xff09…

【嵌入式操作系统(Linux篇)】实验期末复习(1)

以下是关于嵌入式操作系统&#xff08;Linux篇&#xff09;的实验汇总&#xff0c;大概率都是会考的 特别是shell程序和文件IO的操作 嵌入式操作系统实验小结—涉及期末大题 &#xff08;一&#xff09;Linux操作系统的使用实验 1、认识Linux操作系统的目录结构 请进入自己…

【C++课程设计——演讲比赛系统】

文章目录 前言一、演讲比赛程序需求二、每个功能模块的实现1. 创建管理类(.h文件)2.1. 创建管理类(.cpp文件)3.创建参赛选手类(.h)4.将整体逻辑进行封装 测试项目总结 前言 在学习完C的stl容器后&#xff0c;我们来写一下小项目对其进行应用&#xff01; 项目名称为&#xff1…

cocos creator 调试插件

适用 Cocos Creator 3.4 版本&#xff0c;cocos creator 使用google浏览器调试时&#xff0c;我们可以把事实运行的节点以节点树的形式显示在浏览器上&#xff0c;支持运行时动态调整位置等、、、 将下载的preview-template插件解压后放在工程根目录下&#xff0c;然后重新运行…

day23-- 39. 组合总和+40.组合总和II + 131.分割回文串

一、 39. 组合总和 题目链接&#xff1a;https://leetcode.cn/problems/combination-sum/ 文章讲解&#xff1a;https://programmercarl.com/0039.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8C.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV1KT4y1M7HJ 1.1 初见思路…

JAVA期末速成库(10)第十一章

一、习题介绍 Check Point&#xff1a;P416 11.1&#xff0c;11.6&#xff0c;11.7&#xff0c;11.8&#xff0c;11.12&#xff0c;11.17&#xff0c;11.24 Programming Exercise&#xff1a;11.1 二、习题及答案 Check Point&#xff1a; 11.1 True or false? A subcl…

Windows下activemq集群配置(broker-network)

1.activemq版本信息 activemq&#xff1a;apache-activemq-5.18.4 2.activemq架构 3.activemq集群配置 activemq集群配置基于Networks of Brokers 这种HA方案的优点&#xff1a;是占用的节点数更少(只需要2个节点),而且2个broker都可以响应消息的接收与发送。不足&#xff…

003-GeoGebra如何无缝嵌入到PPT里

GeoGebra无缝嵌入到PPT里真是一个头疼的问题&#xff0c;已成功解决&#xff0c;这里记录一下&#xff0c;希望可以帮助到更多人。 注意&#xff0c;后续所有的文章说的PPT都是Offce Power Point, 不要拿着WPS的bug来问我哦&#xff0c;我已经戒WPS了&#xff08;此处表示无奈&…

基于Spring Boot的校园失物招领系统

1 项目介绍 1.1 研究的背景及意义 在网络时代飞速发展的今天&#xff0c;随着网络技术日臻完善&#xff0c;我们的生活方式正经历深刻变革。在物质追求日益增长的同时&#xff0c;提升个人精神境界也成为了现代人的共同向往&#xff0c;而阅读则是滋养心灵、丰富精神世界的重…

Ubuntu Server 和 Ubuntu Desktop 组合使用

1.常见的组合使用方式 Ubuntu Server 和 Ubuntu Desktop 确实可以组合使用&#xff0c;但具体要看你的需求和使用场景。以下是一些常见的组合使用方式&#xff1a; 单一设备上安装&#xff1a;你可以在一台设备上同时安装 Ubuntu Server 和 Ubuntu Desktop。这样&#xff0c;你…

【SQL Server数据库】视图的使用

一、用SQL语句完成下列功能。 1&#xff0e;建立一视图View_CSTeacher&#xff0c;列出计算机系各个老师的资料(姓名、性别、职称)。 create view View_CSTeacher asselect Teac_name, Teac_sex, TechPostfrom Teacherwhere Depar_id in (select Depar_id from Deparment whe…

SpringCloudAlibaba基础四 微服务调用组件OpenFeign

JAVA 项目中如何实现接口调用&#xff1f; 1&#xff09;Httpclient HttpClient 是 Apache Jakarta Common 下的子项目&#xff0c;用来提供高效的、最新的、功能丰富的支持 Http 协议的客户端编程工具包&#xff0c;并且它支持 HTTP 协议最新版本和建议。HttpClient 相比传统 …

无人机飞行操作技巧

要想充分利用无人机&#xff0c;掌握其操作技巧非常关键。以下是一些基础而重要的无人机操作技巧&#xff0c;可以帮助你更安全、更有效地使用无人机。 扫描式拍摄&#xff1a;这种方法涉及慢慢地将无人机从一个点移动到另一个点&#xff0c;同时保持相机对准一个特定的主题。…

Kafka 位移

Consumer位移管理机制 将Consumer的位移数据作为一条条普通的Kafka消息&#xff0c;提交到__consumer_offsets中。可以这么说&#xff0c;__consumer_offsets的主要作用是保存Kafka消费者的位移信息。使用Kafka主题来保存位移。 消息格式 位移主题就是普通的Kafka主题。也是…

windows MSVC编译安装libcurl

$ git clone https://github.com/curl/curl.git $ cd curl/winbuild依照curl/winbuild/README.md的指示&#xff0c; 启动visual studio的命令行工具&#xff0c;这里要注意别选错. 如果要编译出x64版本的libcurl&#xff0c;就用x64的命令行工具&#xff1b;如果要编译出x86…

VSCode插件开发经验小结

从零基础接手DX扩展开发维护&#xff0c;到完成DX扩展从O2平台迁移到 VSCode 平台&#xff0c;现在也积累了一些经验&#xff0c;本文将对这一过程中的学习经历做一个简单小结&#xff0c;也希望可以通过本文帮助想要开发 VSCode 扩展的同学可以更快速的上手。 VSCode (Visual …

福昕阅读器再打开PDF文件时,总是单页显示,如何设置打开后就自动显示单页连续的模式呢

希望默认进入连续模式 设置方法 参考链接 如何设置使福昕阅读器每次启动时不是阅读模式 每次启动后都要退出阅读模式 麻烦_百度知道 (baidu.com)https://zhidao.baidu.com/question/346796551.html#:~:text%E5%9C%A8%E3%80%90%E5%B7%A5%E5%85%B7%E3%80%91%E9%87%8C%E6%9C%89%E…

使用ROS2的RCLCPP客户端库来实现话题通信

1.创建发布者目录文件 cd d2lros2/ mkdir -p chapt3/chapt3_ws/src cd chapt3/chapt3_ws/src 2.创建发布者节点 ros2 pkg create example_topic_rclcpp --build-type ament_cmake --dependencies rclcpp 3.新建发布者类 touch example_topic_rclcpp/src/topic_publisher_01.…

[CAN] Intel 格式与 Motorola 格式的区别

编码格式 数据传输规则一、Intel 格式编码二、Motorola 格式编码三、分析总结🙋 前言 CAN 总线信号的编码格式有两种定义:Intel 格式与 Motorola 格式。究竟两种编码格式有什么样的区别呢?设计者、dbc 文件编辑者或者测试人员又该如何判断两种格式,并进行有效正确的配置和解…

下载旧版本vscode及扩展,离线下载远程linux服务器插件

背景 工作的内网没有网络&#xff0c;无法使用网络来下载插件和vscode软件&#xff0c;且有远程linux服务器需求&#xff0c;linux服务器中lib相关库比较旧且无法更新&#xff0c;所以需要选择一个旧版本的vscode&#xff0c;相应插件也需要选择旧版本的 旧版本vscode下载 没…