C语言————快速幂

server/2025/2/12 14:45:56/

在 C 语言中,快速幂是一种用于高效计算幂运算(即 a^{n},其中 a是底数base,n 是指数power)的算法。常规的幂运算方法是通过循环将底数a连乘n次,时间复杂度为O(n)。而快速幂算法利用了指数的二进制特性,将时间复杂度优化到了O(log n),在处理大指数时能显著提高计算效率。

原理

快速幂算法的核心思想是将指数n 表示为二进制形式,然后根据二进制位的特点来减少乘法运算的次数。例如,计算 a^{13},因为13 的二进制表示是1101_2,即 13 = 2^3 + 2^2 + 2^0,那么a^{13} = a^{2^3 + 2^2 + 2^0} = a^{2^3} \times a^{2^2} \times a^{2^0}

我们可以通过迭代的方式,从a^1 开始,不断将指数翻倍(即(a^2, a^4, a^8, \cdots,并根据指数 n 的二进制位决定是否将当前的幂乘入结果中。

 比如a^9=a^4*a^4*a^1=a^2*a^2*a^2*a^2*a^1=a^1*a^1*a^1*a^1*a^1*a^1*a^1*a^1*a^1

翻倍其实就是平方,a^1翻倍就是a^2a^1*a^1,所以显然如果幂是奇数会多出来一个a^1,就需要特殊处理一下。

这里的二进制技巧是如果一个数是奇数,例如13 的二进制表示是1101_2,二进制第一位(2^0)权值上一定是1,因为其他二进制位上的数都代表2的幂,位运算也可以进行除2操作。

我们举的例子比较简单,实际上在计算中会多次多出a^1这类情况(以后出现的都是翻倍后的),把多出来的单独乘到结果中即可。

代码实现:

long long fastPower(long long base, long long power) {long long result = 1;while (power > 0) {if (power % 2 == 1) {//奇数拆出result = result * base % 1000;}power = power / 2;//除以2base = (base * base) % 1000;//返回的是result,这里可以加个1的判断跳出,没差}return result;
}

这个幂运算数值通常比较大,大多数快速幂都是为了获得结果的低位,所有取模运算,%1000就是保留3位。

包含位运算的代码
long long fastPower(long long base, long long power) {long long result = 1;while (power > 0) {if (power&1) {//奇数拆出result = result * base % 1000;}power>>=1;//除以2base = (base * base) % 1000;//返回的是result,这里可以加个1的判断跳出,没差}return result;
}

 

复杂度分析

  • 时间复杂度:O(log n),因为每次循环指数 n 都会减半。
  • 空间复杂度:O(1),只使用了常数级的额外空间。

http://www.ppmy.cn/server/167087.html

相关文章

MAAS | Ollama 搭建本地 AI 大模型 deepseekWeb 界面调用

目录 一、环境准备二、安装 Ollama三、下载并部署 DeepSeek 模型四、简单交互五、通过 Web 界面调用大模型 在当今人工智能快速发展的时代,本地部署大语言模型赋予了用户更高的灵活性和个性化服务体验。本文介绍了如何准备环境、安装Ollama框架、下载并部署DeepSeek…

科技的尽头:在有限与永恒的夹缝中寻找文明的真谛

当人类用燧石点燃第一簇文明之火时,科技发展的齿轮便已开始转动。这个从原始工具到量子计算机的进化历程,既是人类突破生物局限的史诗,也是文明不断自我解构与重构的哲学叙事。站在人工智能与基因编辑并行的时代节点,"科技尽…

【数据库设计】深入理解常见范式

第一范式(1NF):数据原子性奠基者 核心要求:字段不可再分,消除重复数据组 设计哲学:建立数据存储的基本单元标准实现要点: 每个字段存储单一类型数据消除横向重复(多值字段&#xf…

1.1 画质算法的主要任务

文章目录 画质算法及分类画质问题的核心:退化 画质算法及分类 图像画质算法是指,处理图像或视频数字信号,以提高其视觉质量、人眼感官的算法。图像画质算法可分为:去噪(Denoising), 超分辨率(Super-Resolut…

Unity-Mirror网络框架-从入门到精通之MultipleMatches示例

文章目录 前言MultipleMatchesLobbyViewRoomViewMatchGUIPlayerGUI总结前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mirror网络框架的深入了解,涵盖从基础到高级的多个主题。Mirror是一个用于Unity的开源网络框架,专为多人…

openbmc web/redfish到底层设计(持续更新...)

1.说明 本节是厘清openbmc的界面层web或者redfish到底层数据获取与展示。 不可或缺的是先阅读官方关于redfish的设计文档: 1.https://github.com/openbmc/docs/blob/master/designs/redfish-authorization.md2.https://github.com/openbmc/docs/blob/master/designs/redfish…

后盾人JS -- 模块化开发

开发模块管理引擎 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </he…

对接苹果ios退款接口-保姆级

前言&#xff1a; 1.吐槽&#xff1a;苹果退款很恶心&#xff0c;是它认为符合退款就直接给退了&#xff0c;没有国内店家审核阶段。会导致商户额外损失&#xff0c;所以有必要对用户发起的退款订单做及时响应。 2.尴尬&#xff1a;初次对接苹果相关业务&#xff0c;因为苹果不…