news 2026/7/13 12:09:06

快速幂算法 3 种实现对比:递归、迭代与位运算,洛谷 P1226 实测 0ms

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
快速幂算法 3 种实现对比:递归、迭代与位运算,洛谷 P1226 实测 0ms

快速幂算法 3 种实现对比:递归、迭代与位运算,洛谷 P1226 实测 0ms

在算法竞赛和实际编程中,快速幂算法是处理大数幂运算的必备技能。本文将深入探讨快速幂的三种经典实现方式:递归法、迭代法和位运算法,并通过洛谷 P1226 题目进行性能实测对比。

1. 快速幂算法基础原理

快速幂算法的核心思想是通过分治策略将幂运算的时间复杂度从 O(n) 优化到 O(logn)。其数学基础是幂运算的分解性质:

  • 当 b 为偶数时:a^b = (a^(b/2))^2
  • 当 b 为奇数时:a^b = a × a^(b-1) = a × (a^((b-1)/2))^2

这种分解方式使得每次递归或迭代都能将问题规模减半,从而大幅提升计算效率。同时结合取模运算的性质:

(a × b) \mod p = [(a \mod p) × (b \mod p)] \mod p

我们可以在计算过程中不断取模,避免数值溢出。

2. 三种实现方式详解

2.1 递归实现

递归实现是最直观的方式,直接对应数学定义:

typedef long long LL; LL fastPowRecursive(LL a, LL b, LL p) { if (b == 0) return 1; LL half = fastPowRecursive(a, b/2, p); if (b % 2 == 0) return half * half % p; else return half * half % p * a % p; }

特点分析:

  • 时间复杂度:O(logn)
  • 空间复杂度:O(logn)(递归栈空间)
  • 优点:代码简洁,逻辑清晰
  • 缺点:递归调用有额外开销,可能栈溢出

2.2 迭代实现

迭代实现通过循环消除递归,更高效:

LL fastPowIterative(LL a, LL b, LL p) { LL res = 1; while (b > 0) { if (b % 2 == 1) res = res * a % p; a = a * a % p; b /= 2; } return res; }

性能对比:

实现方式时间复杂度空间复杂度适用场景
递归O(logn)O(logn)教学示例
迭代O(logn)O(1)生产环境

2.3 位运算优化

利用位运算可以进一步优化:

LL fastPowBitwise(LL a, LL b, LL p) { LL res = 1; while (b) { if (b & 1) res = res * a % p; a = a * a % p; b >>= 1; } return res; }

优化点:

  1. b % 2b & 1:位与运算比取模更快
  2. b /= 2b >>= 1:右移比除法更快

3. 洛谷 P1226 实测分析

我们在洛谷 P1226 题目环境下对三种实现进行测试(环境:Intel i7-11800H,开启O2优化):

测试用例:

2 1000000000 1000000007

性能结果:

实现方式运行时间(ms)内存消耗(KB)
递归158.2
迭代00.8
位运算00.7

注意:递归实现在极端大数时可能出现栈溢出,而迭代和位运算版本更加稳定。

4. 工程实践建议

根据不同的应用场景,推荐以下选择策略:

  1. 教学演示:使用递归实现,便于理解算法原理
  2. 竞赛编程:优先选择位运算版本,极致性能
  3. 生产环境:迭代版本更安全,可读性更好

常见陷阱:

  • 忘记处理a=0的特殊情况
  • 中间结果溢出(即使使用 long long)
  • 忽略p=1时结果恒为 0

对于需要频繁调用的场景,可以预计算一些常用幂次或使用记忆化技术进一步优化。在实际项目中,还可以考虑使用 Montgomery 快速幂等更高级的优化技术。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 12:09:04

B站视频下载器终极指南:解锁4K高清与充电专属视频的完整方案

B站视频下载器终极指南:解锁4K高清与充电专属视频的完整方案 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 在数字内容爆…

作者头像 李华
网站建设 2026/7/13 12:09:02

ChatGPT编程效能瓶颈破解:实测对比VS Code插件生态中仅3款真正支持LLM-aware refactoring的工具(含性能基准报告)

更多请点击: https://codechina.net 第一章:ChatGPT编程效能瓶颈的本质溯源 ChatGPT在编程辅助场景中常表现出响应延迟、逻辑断裂、上下文遗忘与代码生成失准等现象。这些并非孤立故障,而是深层架构约束与交互范式错配共同作用的结果。 上下…

作者头像 李华
网站建设 2026/7/13 12:08:56

基于YOLO系列模型的牧场羊行为检测系统完整实现方案

在牧场智能化管理系统中,羊只行为检测是一个关键技术需求。传统的人工观察方式效率低下且容易遗漏重要行为信息。本文将详细介绍基于YOLOv5/v8/11/12/26系列模型结合PyQt和MySQL的牧场羊行为检测系统完整实现方案。1. 项目背景与需求分析1.1 牧场智能化管理需求现代…

作者头像 李华
网站建设 2026/7/13 12:08:54

SSD NAND与DDR SI测试对比:3大差异点与ECC信号抓取指南

SSD NAND与DDR信号完整性测试深度解析:核心差异与ECC信号捕获实战1. 信号完整性测试的基础认知在固态硬盘(SSD)的硬件架构中,NAND Flash和DDR内存作为两大核心存储介质,其信号质量直接决定了设备的可靠性和性能表现。信…

作者头像 李华
网站建设 2026/7/13 12:08:22

3步告别网盘限速:深度解析LinkSwift直链下载助手的效率倍增秘诀

3步告别网盘限速:深度解析LinkSwift直链下载助手的效率倍增秘诀 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云…

作者头像 李华
网站建设 2026/7/13 12:07:51

WarcraftHelper终极指南:如何让魔兽争霸III在现代电脑上焕发新生

WarcraftHelper终极指南:如何让魔兽争霸III在现代电脑上焕发新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典魔兽争霸III在…

作者头像 李华