【leetcode 力扣刷题】数学题之计算次幂//次方:快速幂

news2024/11/16 0:03:11

利用乘法求解次幂问题—快速幂

  • 50. Pow(x, n)
  • 372. 超级次方

50. Pow(x, n)

题目链接:50. Pow(x, n)
题目内容:
在这里插入图片描述
题目就是要求我们去实现计算x的n次方的功能函数,类似c++的power()函数。但是我们不能使用power()函数直接得到答案,那样这道题就失去了考察的意义。
前面提到乘法a*b可以看作是b个a相加,用加法来完成乘法;x的n次方,就是n个x相乘,那么同样可以用乘法来代替次幂计算,我们称之为快速幂。比如5^7,就是7个5相乘,快速幂的过程如下:
在这里插入图片描述
第一轮是乘以5,第二轮乘以5*5,第三轮乘以(5*5)*(5*5),也就是每一轮乘的数都在加倍,这样就能够在log^n的时间复杂度内完成x^n的计算。代码实现如下(C++):


class Solution {
public:
    double myPow(double x, int n) {
    	//先处理特殊情况
        if(x == 0) return 0.0;
        if(x == 1) return 1.0;
        if(n == 0) return 1.0;
        bool flage = false;
        long _n = n;
        //如果n是负数,x^n = 1/(x^|n|)
        if(_n < 0){
            flage = true;
            _n = -_n;
        }
        double ans = 1;
        double mul = x;
        //快速幂主体过程
        while(_n){  
            if(_n&1)  //如果n末位为1,就乘以mul
                ans *= mul;      
            mul *= mul; //mul翻倍
            _n >>= 1; //n右移一位
        }
        return flage ? 1.0/ans : ans; //判断是否需要变成倒数
    }
};

372. 超级次方

题目链接:372. 超级次方
题目内容:
在这里插入图片描述
看起来和上一题是差不多的,但是由于b是一个非常大的正整数,以数组形式给出[1,0,3,4]就表示1034【末位是个位,然后是十位,然后是百位,最前面的是最高位】。其中1 <= b.length <= 2000说明b可以达到10^1999的程度,根本没法用double、long long等数据类型来存储这么大的数,所以在运算过程中也不能直接把b转换成一个数或者每一位转换成一个数,需要其他方法:
在这里插入图片描述
将每一位b[i]的数值b[i]*10^(m-1-i)【其中m是b.length】分解成b[i]和10^(m-1-i)两部分,每次先求a^(10^(m-1-i))得到A,再求A^b[i]。a^(10^(m-1-i))随着i的减小越来越大,但是可以看作是上一轮的A^10。
由于每次次幂结果都要mod 1337,所以结果是不会溢出的,a^(10^(m-1-i))每一次用上一轮的A^10来表示就解决了b很大的问题。另外需要注意的是(a*b) mod k =( (a mod k) * (b mod k) ) mod k。
a^(10^(m-1-i))和A^b[i]以及A^10都用快速幂求解。快速幂过程中根据(a*b) mod k =( (a mod k) * (b mod k) ) mod k加上求模操作。代码如下(C++):

class Solution {
public:
	//快速幂
    long quick_pow(int a, int n){
        int ans = 1;
        int mul = a;
        while(n){
            if(n&1)
            	//加上求模操作
                ans = ( (ans % 1337) * (mul % 1337)) % 1337;
            //mul也加上求模操作
            mul = ((mul % 1337) * (mul % 1337)) % 1337;
            n>>=1;
        }
        return ans;
    }
    int superPow(int a, vector<int>& b) {
        int ans = 1;        
        for(int j = b.size() - 1; j >= 0; j--){
            ans =( (ans % 1337) * (quick_pow(a,b[j]) % 1337) ) % 1337;
            //每次a都在上一次的基础上,变成其10次方
            a = quick_pow(a, 10);
        }
        return ans;
    }
};

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

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

相关文章

AI 也有冷静期?

阅读本文大概需要 1.31分钟。 上一次听说「冷静期」这个词&#xff0c;还是大家都在讨论「离婚冷静期」对时候&#xff0c;最近时常看到「冷静期」&#xff0c;缘于大家所讨论的 AI 热度下降事情&#xff0c;俗称「AI 冷静期」。 1、 上半年&#xff0c;每隔一段时间&#xff0…

无涯教程-JavaScript - NORMSDIST函数

NORMSDIST函数替代Excel 2010中的NORM.S.DIST函数。 描述 该函数返回标准正态累积分布函数。分布的平均值为0(零),标准偏差为1。使用此功能代替标准法线区域的表格。 语法 NORMSDIST (z)争论 Argument描述Required/OptionalZThe value for which you want the distributio…

【OpenCV入门】第八部分——滤波器

文章结构 图像平滑处理均值滤波器中值滤波器高斯滤波器双边滤波器拉普拉斯高通滤波器 图像平滑处理 图像平滑处理是指在尽量保留原图像信息的情况下&#xff0c;去除掉图像内部的噪声&#xff08;分布不均匀的、高亮度的像素点&#xff09;。而用于图像平滑处理的工具就是滤波…

Qt +VTK+Cmake 编译和环境配置(第一篇 采坑)

VTK下载地址&#xff1a;https://vtk.org/download/ cmake下载地址&#xff1a;https://cmake.org/download/ 版本对应方面&#xff0c;如果你的项目对版本没有要求&#xff0c;就不用在意。我就是自己随机搭建的&#xff0c;VTK选择最新版本吧&#xff0c;如果后面其他的库不…

HttPClient简介及示例:学习如何与Web服务器进行通信

文章目录 前言一、引入依赖二、使用步骤1.创建被调用者2.创建调用者三、结果被调用者服务&#xff1a;调用者服务&#xff1a; 总结 前言 欢迎来到本篇博客&#xff0c;这是一个关于HttPClient的入门案例的指南。&#x1f389; 在今天的网络世界中&#xff0c;与服务器进行数据…

数据挖掘导论学习笔记1(第1 、2章)

参考&#xff1a;https://blog.csdn.net/u013232035/article/details/48281659?spm1001.2014.3001.5506 和《数据挖掘导论》学习笔记&#xff08;第1-2章&#xff09;_时机性样本_schdut的博客-CSDN博客 第1章 绪论 数据挖掘是一种技术&#xff0c;它将传统的数据分析方法…

【LeetCode】剑指 Offer <二刷>(4)

目录 题目&#xff1a;剑指 Offer 09. 用两个栈实现队列 - 力扣&#xff08;LeetCode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;剑指 Offer 10- I. 斐波那契数列 - 力扣&am…

FFmpeg5.0源码阅读——FFmpeg大体框架(以GIF转码为示例)

摘要&#xff1a;前一段时间熟悉了下FFmpeg主流程源码实现&#xff0c;对FFmpeg的整体框架有了个大概的认识&#xff0c;因此在此做一个笔记&#xff0c;希望以比较容易理解的文字描述FFmpeg本身的结构&#xff0c;加深对FFmpeg的框架进行梳理加深理解&#xff0c;如果文章中有…

ROS机器人编程---------(二)ROS中的核心概念

ROS机器人编程 ROS中的核心概念 ROS的通信机制 在ROS中结点是最小单元&#xff0c;比如说机器人的遥控器可以作为一个控制结点&#xff0c;机器人上的摄像头也可以看作一个结点&#xff0c;ROS通过协调各个结点来实现 在启动任何ROS结点之前&#xff0c;都必须先启动ROS Mas…

【数据结构】 二叉树面试题讲解->贰

文章目录 &#x1f30f;引言&#x1f384;[二叉树遍历](https://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef?tpId60&&tqId29483&rp1&ru/activity/oj&qru/ta/tsing-kaoyan/question-ranking)&#x1f431;‍&#x1f464;题目描述&#…

阿里云短信服务测试

测试时遇到下面的错误; {"Message":"测试专用签名和模板必须结合使用","RequestId":"59035729-FD2A-5618-A2BE-6CABD839B400","Code":"isv.SMS_TEST_SIGN_TEMPLATE_LIMIT"} 上网查了下才发现&#xff1a; 使用…

一些自己整理的工具实用参数

工具实用参数 sqlmap -u: 指定需要测试的目标URL&#xff08;格式&#xff1a;http://www.example.com/test.php?id1&#xff09; --cookie: 设置需要发送的 HTTP Cookie&#xff0c;例如&#xff1a;--cookie"sid123456;PHPSESSID654321" --threads&#xff1a;…

化学中的各种基团(羧基、酰胺、吡喃、联苯结构)

一、羧基 化学式–C(O)OH&#xff0c;是羧酸所具有的官能团。一般而言&#xff0c;羧基上的氢有较大的电离倾向&#xff0c;从而使羧酸在水溶液中显酸性。羧酸根负离子所具有共轭结构可以看作是氢易电离的潜在动力。 二、羟基 化学式&#xff0d;OH&#xff0c;是氧原子以共价…

nginx的配置文件

nginx的配置文件 一、nginx配置文件1.1、主配置文件详解1.2、子配置文件 二、修改启动程序的全局配置2.1、修改启动的工作进程数优化2.2、cpu与eorker process绑定优化2.3、PID路径优化2.4、修改工作进程的优先级 优化2.5、调试工作进程打开文件的文件个数2.5.1、基本原理2.5.2…

ac7260网卡不能连5g

之前路由器是双频&#xff0c;最近为了连物联网一堆&#xff0c;把双频拆成两个wifi 结果电脑上装的pdd网卡就罢工了&#xff0c;连4g可以&#xff0c;但是连5g网络就不行&#xff0c;连上却没网&#xff0c;导致网盘下东西慢。刚开始以为是tplink的易展问题&#xff0c;结果看…

Python Opencv实践 - 凸包检测(ConvexHull)

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/stars.png") plt.imshow(img[:,:,::-1])img_contour img.copy() #得到灰度图做Canny边缘检测 img_gray cv.cvtColor(img_contour, cv.COLOR_BGR2GRAY) edges…

Python将多个文件的名称或后缀名由大写字母修改为小写的方法

本文介绍基于Python语言&#xff0c;基于一个大文件夹&#xff0c;遍历其中的多个子文件夹&#xff0c;并对于每一个子文件夹中的大量文件&#xff0c;批量将其文件的名称或后缀名中的字母由大写修改为小写的方法。 本文期望实现的需求为&#xff1a;现有一个大文件夹&#xff…

netcat的使用

目录 netcat简介 nc的使用场景 nc实现通信 创建一个服务端 创建一个客户端 具体案例 环境 win10在具体路径下执行命令 win7在具体路径下执行命令 netcat文件传输 nc文件传输的利用 服务器等待接收文件 客户端向服务器发送文件 服务器向连接的客户端发送文件 客户…

内网隧道代理技术(二十)之 CS使用HTTP代理上线不出网机器

CS使用HTTP代理上线不出网机器 CS工具自带上线不出网机器 如图A区域存在一台中转机器,这台机器可以出网,这种是最常见的情况。我们在渗透测试的过程中经常是拿下一台边缘机器,其有多块网卡,边缘机器可以访问内网机器,内网机器都不出网。这种情况下拿这个边缘机器做中转,…

OpenSIPS 管理接口的对接

文章目录 1. 背景2. OpenSIPS 的 HTTP 管理接口对接2.1 脚本配置2.2 请求方式 1. 背景 OpenSIPS 是功能完善的开源 SIP 代理服务器&#xff0c;它在支持 SIP 代理的主要功能以外&#xff0c;也为使用者提供了一套 MI 管理接口。面向不同的通信方式&#xff0c;OpenSIPS 还提供…