二分快速幂-题型归纳与总结

简介: 二分快速幂-题型归纳与总结

一、概念

二分快速幂

二、模板

请看例题2

三、例题

题:50. Pow(x, n)

实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x^n^ )。

示例 1:

输入:x = 2.00000, n = 10
输出:1024.00000

示例 2:

输入:x = 2.10000, n = 3
输出:9.26100

示例 3:

输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25

提示:

-100.0 < x < 100.0
-231 <= n <= 231-1
-104 <= xn <= 104    

解:

解题思路:快速幂

快速幂(二进制解析):

对于一个任何十进制正整数 n ,设其二进制为:“bm...b2b1”

二进制转十进制:

$$ n=2^0*b_1+2^1*b_2+\cdot \cdot \cdot +2^{m-1}*b_m $$幂的二进制展开: $$

x^n=x^{2^0b_1+2^1b_2+\cdot \cdot \cdot +2^{m-1}b_m}=x^{2^0b_1}x^{2^1*b_2}\cdot \cdot \cdot x^{2^{m-1}}

$$ *** **快速幂(二分推导):** $$

x^n=\left{ \begin{array}{l} \left( x^2 \right) ^{n/2},\ n\text{为偶数}\\ x\left( x^2 \right) ^{n/2},\ n\text{为奇数}\\ \end{array} \right.

$$ *** AC代码: ```java class Solution { public double myPow(double x, int n) { if(x == 0.0f) return 0.0d; // 底数为0 long b = n; // 防止负数转正数溢出 if(b < 0) { b = -b; x = 1/x; } double res = 1.0; while(b > 0) { if((b & 1) != 0) res *= x; x *= x; b >>= 1; } return res; } } ``` ## 题:372. 超级次方 你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。 示例 1: 输入:a = 2, b = [3] 输出:8 示例 2: 输入:a = 2, b = [1,0] 输出:1024 示例 3: 输入:a = 1, b = [4,3,3,8,5,2] 输出:1 示例 4: 输入:a = 2147483647, b = [2,0,0] 输出:1198 提示: 1 <= a <= 231 - 1 1 <= b.length <= 2000 0 <= b[i] <= 9 b 不含前导 0 ## 解: 解题思路:`快速幂` 例子: 0. a^K^ = 99^2345^ 1. 99^K^ = 99^234*10+5^ 2. 99^234*10+5^ = 99^234*10^ * 99^5^ 3. 99^234*10^ * 99^5^ = (99^234^)^10^ * 99^5^ AC代码: ```java class Solution { int MOD = 1337; public int superPow(int a, int[] b) { return dfs(a, b, b.length - 1); } int dfs(int a, int[] b, int u) { if(u == -1) return 1; return qpow(dfs(a, b, u - 1), 10) * qpow(a, b[u]) % MOD; } // 快速幂 int qpow(int a, int b) { int ans = 1; a %= MOD; while(b > 0) { if((b & 1) != 0) ans = ans * a % MOD; a = a * a % MOD; b >>= 1; } return ans; } } ```

相关文章
|
4月前
|
人工智能 自然语言处理 应用服务中间件
Bolt.diy 创意建站方案测评 | 不懂代码,你也可以快速建站
本文详细介绍了一款名为Bolt.diy的创意建站工具的使用流程与功能体验。Bolt.diy是阿里云推出的一款基于自然语言交互的Web开发工具,用户可通过简单描述需求快速生成个性化网站。文章从开通服务、配置API-Key到实际创建网站进行了详细步骤解析,并展示了如何通过本地nginx部署生成的代码。此外,还尝试了优化初级会计考试招生宣传页面的过程,发现目前工具在图片资源处理和一键发布功能上存在局限性。整体来看,Bolt.diy操作便捷、成本可控,适合个人及企业低成本验证创意需求。
|
应用服务中间件 Linux 网络安全
虚拟机Centos下载安装Nginx并安装ssl模块——小白教程
虚拟机Centos下载安装Nginx并安装ssl模块——小白教程
630 0
|
3月前
|
人工智能 缓存 搜索推荐
手把手基于ModelScope MCP协议实现AI短视频创作:零代码自动化工作流
本文介绍了基于ModelScope MCP协议的AI视频生成解决方案,涵盖核心机制解析、零代码工作流搭建、性能优化策略及全链路异常处理。通过统一上下文描述符抽象异构AI服务,实现图像生成、语音合成与视频剪辑的自动化编排。结合缓存优化与错误重试机制,大幅提升生成效率(如5分镜视频从91.7s降至22.4s)。最后展示《夏日海滩》生成案例,并探讨个性化风格迁移与商业场景集成等进阶方向,揭示零代码本质为服务、流程与资源的三层抽象。
529 18
|
存储 前端开发 定位技术
osgEarth使用笔记4——加载矢量数据
osgEarth使用笔记4——加载矢量数据
517 0
|
持续交付 Python
解决Python执行命令时路径空格引发的困扰
在Python编程中,执行含空格的系统命令可能导致程序出错。本文介绍了如何处理这类问题:1) 使用引号包裹路径;2) 转义空格字符;3) 利用`os`模块的`normpath()`或`join()`处理路径;4) 使用`subprocess`模块进行更复杂的命令执行。最佳实践包括避免路径空格、使用`os.path.join()`构建路径及熟悉`subprocess`。
解决Python执行命令时路径空格引发的困扰
|
JavaScript C++
js【详解】比较(数字与数字比较、数字与字符串比较、字符串与字符串比较、字符串与非数字比较……)
js【详解】比较(数字与数字比较、数字与字符串比较、字符串与字符串比较、字符串与非数字比较……)
262 0
|
算法 数据可视化 计算机视觉
论文阅读笔记 | 目标检测算法——Generalized Focal Lossv1,v2
论文阅读笔记 | 目标检测算法——Generalized Focal Lossv1,v2
1505 0
论文阅读笔记 | 目标检测算法——Generalized Focal Lossv1,v2
|
大数据 流计算
掌阅科技基于阿里云实时计算Flink构建数据基建平台
掌阅科技专注于数字阅读,是全球领先的数字阅读平台之一。基于数字阅读平台的海量用户,掌阅通过阿里云实时计算Flink等大数据计算和分析服务,搭建商业化、用户增长、推荐服务等数据基建平台,实现商业化增值与用户阅读体验的结合。
830 1