快速幂算法

快速幂算法及其拓展 本文讲解了快速幂算法的定义、复杂度证明及两种实现(递归与非递归),以及它的两个重要拓展:快速幂模M算法和矩阵快速幂。其中矩阵快速幂算法是矩阵求幂问题对整数求幂问题的借鉴,实际应用中对于线性递推式求解能起到强大的效率优化。 阅读详情

当我们在求a^b,即a的b次方时,我们轻易的就会想到使用for循环将a个连续相乘求到我们想要的结果

long long normalPower(long long base,long long power){
    long long result=1;
    for(int i=1;i<=power;i++){
        result=result*base;
    }
    return result;
}

对于一些题目

求a^b的最后三位表示的数字

这题其实好办,只要对1000取模就成
但我们都知道,指数会呈现爆炸式增长
假如我们的b是一个比较大的数字,大到用long long都可能会溢出
比如2^100
对于这样的情况,结果都无法求出来,让我怎么进行“取模”运算呢?你这不是瞎闹吗?
于是我们引入公式

(a * b) % p = (a % p * b % p) % p 

将程序改进

long long normalPower(long long base,long long power){
    long long result=1;
    for(int i=1;i<=power;i++){
        result=result*base;
        result=result%1000;
    }
    return result%1000;
}

如此一来,问题的确得到了解决,但是新的问题又来了,这样的算法运算的效率是相当差劲的,于是我们进入这篇文章的重点,如何提高上述代码的运算效率?
于是我们可以想到幂的运算公式

28=(22)4=(42)2=162=256

这样便节约了计算时间
如果b是奇数,我们也可以特判,分离出来一个,如:

29=(22)4*2=(42)2*2=162*2

思路清奇,改进代码

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;
        base = (base * base) % 1000;
    }
    return result;
}
}

到这里基本已经很高效了,但是通过二进制的位运算还可以进一步优化

long long fastPower(long long base, long long power) {
    long long result = 1;
    while (power > 0) {
        if (power & 1) {//此处等价于if(power%2==1)
            result = result * base % 1000;
        }
        power >>= 1;//此处等价于power=power/2
        base = (base * base) % 1000;
    }
    return result;
}

参考资料.

CODESYS Softmotion(一)功能介绍 一、CODESYS SoftMotion RTE SL产品 1.1 CODESYS Runtime SL 产品家族介绍 目前支持的主流厂商的硬件产品,让部署在上面的成为实时设备。 对于Windows系统,根据需求选择对应的Runtime: RTE极大的提高了实时性,适合进行运动控制,同时RTE还支持了多个主从站协议: 还可以选择可选的功能(Single License): RTE对硬件和系统有要求,如果你需要硬件功能,那么网卡会有最低要求。 1.2 RTE的下载和安装 在官网http://codes 阅读详情

相关推荐

Megatron-LM深度解析:万亿参数大模型的3D并行训练之道

训练框架,采用创新的"层内模型并行"设计,通过将Transformer层的计算拆分到多个GPU上并行执行,显著提升训练效率。该系统支持3D并行策略(数据并行、张量并行、流水线并行)和序列并行等新技术,成功应用于训练5300亿参数的MT-NLG模型。相比DeepSpeed、TPU GSPMD等框架,Megatron-LM在NVIDIA GPU上展现出卓越性能,并与TensorRT等工具深度集成,形成从训练到部署的完整解决方案。该项目持续演进,已成为大模型训练的重要基准。

数据与算法架构提升之路专栏 2088

xor 逻辑异或

定义 Exclusive OR(异-或运算) 异或(xor)是一个数学运算符。它应用于逻辑运算。异或符号为“^”。其运算法则为: a^b=(a' and b) or (a and b')(a'为非a)。 真异或假的结果是真,假异或真的结果也是真,真异或真的结果是假,假异或假的结果是假。就是说两个值不相同,则异或结果为真。反之,为假。 不同为1,相同为0. 异或也叫半加运算,其运算法则相当

原创学无止尽 2万+

安检机图像处理避坑指南:从条纹校正到物质分类,那些论文里没写的工程细节

本文深入探讨了双能X射线安检机图像处理中的关键工程实践,从条纹校正到物质分类,揭示了论文中未提及的实用技巧。针对探测器校正、物质分类模糊、伪彩色系统设计等核心问题,提供了动态参数更新、空间上下文分析和自适应色彩映射等解决方案,助力提升安检系统的准确性和鲁棒性。

weixin_30325487的博客 887

利用for循环计算a的b方

//输入a,b实现a的b方 #include<stdio.h> Cf(int x, int y) { int i = 0; int sum = 1; for (i = 0; i < y; i++) { sum = sum * x; } return sum;//必须返回sum的值,否则无法循环。 } int main() { int a = 0; int b = 0; printf("请输入两个整数;"); scanf_s("%d %d", &a, &am.

fulai6的博客 1882

机械拆装-基于Unity-总体设计

建立一个机械装配的场景

唐小墨同学的博客 2774

pikachu靶场: 暴力破解第四关(token防爆破)

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个 Token 同时将此 Token 返回给客户端。此外,Token 是有时效的,一段时间之后或下一次请求时用户需要重新验证。

X_shiguang的博客 1720

a^=b是什么意思

a^=b等价于a = a^b,其中^是位异或运算,即将a与b的对应位进行异或运算,同为0或者同为1时,对应位结果为0;否则为1。 假设,a的值为二进制的1010,b的值为二进制的1100,那么a^b = 0110

qq690452074的专栏 8223

FICO F.27 Customer statement 打印

需求,定制化打印,替换标准的F.27打印 类似于采购订单的打印,但是略有不同,查阅资料之后步骤如下: T-code F.27 is SAP standard program to produce customer/vendor correspondence (letter). Correspondence Type is used to specify the related printing program and form for the particular correspondence. SAP

IamRunjiang的博客 1965

a|b 与 a&b 与 a^b

例:a=6(0110),b=1(0001),则a | b=0111=7;

m0_61483676的博客 1184

Palantir的Ontology:从静态知识图谱到动态业务引擎的跃迁

本文探讨了Palantir的Ontology技术如何将静态知识图谱升级为动态业务引擎。通过引入函数和行动作为核心元素,Ontology实现了业务逻辑的自动化响应与执行,显著提升物流、能源等领域的运营效率。文章详细解析了其混合存储引擎、状态监听网络等关键技术设计,并对比展示了传统架构与Ontology架构的业务价值差异。

weixin_42570296的博客 200

【深度学习新浪潮】气候预测模型的研发进展一览(2025年版)

模型类型核心优势适用场景不足ARIMA(统计模型)简单高效、可解释性强短期单变量预测非线性、长时依赖建模差随机森林(机器学习)多特征融合、抗噪声中短期多因素预测空间相关性、时序趋势捕捉弱LSTM(深度学习)长时依赖建模、端到端中长期时序预测物理一致性差、数据需求量大物理知情AI物理规律约束、高可靠性极端天气、长期气候变化模型复杂、计算成本高。

专注:太空算力、AI infra、异构调度、大模型成本工程 528

快速幂求a的b次方

快速幂的目的:快速求幂 ,a的b次方。平常我们算一个a的b次方的时间为O(b),也就是O(n)的时间复杂度,当然,如果b很大时,我们是不是就没法下手了,时间就会很多,导致超时,我们可以用快速幂算法来将时间复杂度降低点儿,降低为O(log n )就是最好的答案。假设我们要求a^b,那么其实我们可以把b拆成二进制来运算,就是把幂拆分,该二进制的第 i 位的权为2^(i-1) ,例如当 b = 11 时...

yuewenyao的博客 9263

Unreal从入门到精通之 UE4 vs UE5 VR性能优化实战

这篇文章分享了UE5 VR项目的性能优化经验。作者通过对比UE4和UE5的VR模板性能,发现UE5默认帧率只有45FPS,远低于UE4的100FPS。主要性能瓶颈来自Lumen全局光照、虚拟阴影贴图等新特性。文章详细列出了12项关键优化设置,包括禁用Lumen、关闭虚拟阴影、使用前向渲染等,并分析了各项调整对性能的影响程度。特别指出删除默认的VolumetricCloud可立即提升5帧。最后建议根据场景需求平衡画质与性能,对于高帧率要求的VR项目,可能需要谨慎使用UE5或关闭其部分高级渲染功能。

TxNet 1380

算法 —— 快速幂

下几层的总目标是让,不是奇数,只把 81 ^ 2 当作 (81 ^ 2) ^ 1。这时候已经不用看成什么分解了,𝑎𝑛𝑠∗=6561 就可完成总目标,b/2 为 0,结束循环。现在 𝑏𝑎𝑠𝑒=𝑎,表示的是,𝑎 ^ 1 = 𝑎,待会 𝑏𝑎𝑠𝑒会发生改变的。,依旧𝑎𝑛𝑠 ∗= 𝑏𝑎𝑠𝑒(base此时为a的四次方)b右移一位后变成0,循环结束。

fen_0108的博客 2802

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【算法分享】快速幂与矩阵快速幂算法详解

在程序竞赛和实际开发中,我们经常遇到需要计算an这样的幂运算。当n很大时(109),直接用循环运算肯定会TLE。这时候就需要用到,而当我们需要计算矩阵的幂时,就派上用场了。

AAA_fanfan的博客 2423

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

矩阵快速幂算法

矩阵快速幂算法、利用矩阵快速幂计算斐波那契数列 矩阵快速幂的本质就是 矩阵+快速幂,思路没什么变化。 快速幂的思路见之前的 快速幂介绍,这里就不多说了。 至于矩阵的话,知道矩阵是啥,怎么算乘法就可以了。 相关矩阵基础 注:已经了解矩阵的可以跳过本部分内容。 简单来说 n∗mn*mn∗m 的矩阵就是个 nnn 行 mmm 列 的大方块。 矩阵要进行乘法运算必须保证第一个矩阵的列数=第二个矩阵的行数。

果光的博客 4487

快速幂算法详解

快速幂算法从入门到精通

m0_72674633的博客 1571

c++入门必学算法 快速幂

一、什么是快速幂 快速幂算法是用来快速计算指数表达式的值的,例如 210000000,普通的计算方法 2*2*2*2…乘10000000次,如果一个数字的计算都要计算那么多次的话,那么这个程序一定是失败的。 学完快速幂之后就可以用几十次计算求出答案了 二、快速幂思想及实现 快速幂思想其实很简单,就是公式的转换 1、当指数是偶数时,我们可以让指数除以2,底数乘以底数 2、当指数是奇数时,我们可以将指数变为奇数 例如 210 指数是偶数,210 = 45 指数是奇数,45 = 4 * 44 指数是偶数,

weixin_52115456的博客 1万+

java快速幂算法

幂运算是指将一个数自身乘以自身多次的运算,其表达式为ana^nan,其中aaa是底数,nnn是指数。

m0_73065928的博客 1497

快速幂取模算法

所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余)。在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快、计算范围更大的算法,产生了快速幂取模算法。我们先从简单的例子入手: 求(a^b)%c=? 算法1.直接设计这个算法: int ans = 1; for(int i = 1;i<=b;i++) { ans = ans * a; } ...

chen_zan_yu_的博客 3096

你必须掌握的,快速幂算法

快速幂算法,在刷题或者面试中会经常遇到,这篇文章,能够让你理解快速幂算法,以及会实现快速幂算法

weixin_43691723的博客 709

快速幂算法【算法 08】

快速幂算法的核心思想是将指数分解为二进制形式,利用“幂的二次方”特性,将时间复杂度从O(n)(常规幂运算需要乘法 n 次)降低到O(log n)。快速幂算法通过减少幂运算的次数,从而将时间复杂度降到了对数级别。它在各种实际场景中的应用展现了其高效性和实用性。如果你需要处理大整数幂次运算,快速幂无疑是一个理想的选择。

delepaste的博客 1338
上一篇: 约瑟夫环问题(未完善)
下一篇: zzulioj新生周赛(6) 2733: 键盘霸主hrs
不是张胖胖
博客等级 码龄6年 67粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值