快速幂算法

算法基础 -- 快速幂算法详解 核心思想:利用幂次的奇偶性和二进制表示,逐步将规模缩小到对数级别。常见应用大数运算:计算ana^nan的值;模运算:如anmodmanmodm;矩阵快速幂:用于斐波那契数列等问题。实现要点按指数奇偶分类,折半处理;取模时加上每次乘法后的模操作,防止溢出。 阅读详情

一:用处:

1.顾名思义,即快速计算幂。对于普通的pow函数,时间复杂度为O(n),因为有n个自身相乘嘛,但是对于快速幂呢,他可以将复杂度降为logn,快好多,这个logn咋算的呢,我没仔细想过,博主太菜了,见谅。

2.对于一个幂算出来极大的数,for example:2^200,这样的数,明显没办法用 long long /int来存放,假如要将该数对一个数取模,势必用到字符串操作方式,想想都麻烦,更别说敲代码了,再者,假如是对一个1e9+7这样大的数取模,则更是emmmm,反正博主太菜了,没想过怎么处理。这时候快速幂就派上用场了。再结合几个数学公式即可解决。

二:代码及解释:

这是我从别人博客复制过来的,因为懒得自己敲了。。

比如计算 3^11,因为11的二进制可表示为1011,则根据数学推理可知:

3^11=3^(2^3+2^1+2^0)=3^(2^3)*3^(2^1)*3^(2^0)

int powadvance(int a,int b){//a是3 b是11
    int ans=1,base=a;//ans是放答案的,base是2的n次方
    while(b!=0){//即b化为二进制后,没有被读取完时执行
        if(b&1!=0)//对化为二进制的b的最后一位检测,看他是不是0,是1的时候执行步骤
          ans*=base;//即按第三个等式从右到左的顺序依次出现从右到左的三个项
        base*=base;//对2的n次方进行更新
        b>>=1;//去掉化为二进制的b的最后一位二进制数,来更新b,即原先为1011,下一轮循环的时候为101
  }
    return ans;
}

最好拿纸笔手算模拟一遍,比较好理解。

快速幂的算法就是如上所示了,再对他进行和取模操作合并

三:快速幂取模

1.数学背景:

 

运算规则

模运算与基本四则运算有些相似,但是除法例外。其规则如下:

  1. (a + b) % p = (a % p + b % p) % p (1)

  2. (a - b) % p = (a % p - b % p) % p (2)

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

  4.  a ^ b % p = ((a % p)^b) % p (4)

  5. 结合律:

  • ((a+b) % p + c) % p = (a + (b+c) % p) % p (5)

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

  • 交换律:

    (a + b) % p = (b+a) % p (7)

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

  • 分配律:

    (a+b) % p = ( a % p + b % p ) % p (9)

    ((a +b)% p * c) % p = ((a * c) % p + (b * c) % p) % p (10)

以上是百度百科复制来的,四条基本规则比较重要一些。由基本规则可知,若想对幂取模,可对快速幂做以下的修改。

long long quick(long long a,int b,long long c) //a是3,b是11,c是1e9+7 
{  
    long long ans=1;
    while(b!=0)  
    {  
        if(b&1!=0){
        	ans=(ans*a)%c;//不一样的地方,由基本规则3可得,手动模拟一波即可
		} 
        b>>=1;
        a=(a*a)%c;//由基本规则3可得
 
    }
    return ans;
} 

 

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

相关推荐

AI大模型实战——模型测评:如何评估大模型的表现

大模型评测体系解析:从数据集到基准测试 本文系统梳理了大模型评测的关键要素。在数据集方面,重点介绍了C-Eval等中文评估套件,强调数据质量需通过人工验证保证。评测维度涵盖自然语言理解、知识推理、代码生成等核心能力。基准测试作为标准化评估方法,Glue、SuperClue等平台提供了公平比较的依据。文章指出厂商自评榜单存在水分问题,建议关注第三方评测。同时解析了少样本和零样本两种prompt模式的应用场景差异。最后解释了"SOTA"这一术语在描述模型最优性能时的应用价值。整体呈现了大模型

小志的博客 895

快速幂算法介绍及简单实现

快速幂算法是一种用于计算幂运算的高效算法。它通过将指数进行二进制拆分,并利用指数的二进制表示形式来减少乘法和幂运算的次数,从而提高计算速度。

fzyzo2y的博客 5212

S4 Hana SD -信贷管理 - 03

自动信用控制将针对同一信用控制范围的不同的客户风险类别和信贷组执行不同的信用控制政策。对于ECC系统而言,无需单独设置检查规则,可在自动信贷控制进行设置即可,如图1-5-2。在S4 HANA版本中,自动信贷控制和检查规则是分离的。S4系统需要在定义自动信贷控制的时候,给字段“SAP信用管理”打钩,激活检查规则,然后需要单独在检查规则页签设置检查规则。接下来,我们分别介绍ECC和S4 HANA系统中两种不同配置方式.6.2SPRO。

weixin_46525734的博客 2888

快速幂算法 超详细教程

超详细快速幂教程,几乎是手把手教程,从此写快速幂so easy!两种角度教你快速幂原理,一步一步给你解析。总有你喜欢的解法!

qascetic的博客 5万+

模拟滤波器的基础知识和设计

使用Python实现多种模拟滤波器

faltas的博客 3529

Shopee 虾皮API接口:商品详情采集的实践

随着电商行业的蓬勃发展,数据采集和分析在商业决策中扮演着越来越重要的角色。Shopee作为东南亚领先的电商平台,拥有大量的商品数据。通过Shopee的API接口,我们可以方便地获取商品详情,为数据分析和市场研究提供有力支持。本文将介绍如何使用Shopee API接口采集商品详情,并分享一些实践技巧。提供了丰富的数据接口,包括商品详情、店铺信息、订单数据等。通过API接口,开发者可以轻松地获取Shopee平台上的数据,进行进一步的处理和分析。Shopee API接口:商品详情采集的实践与技巧。

An4480的博客 1885

快速幂算法详解

算法 快速幂

L_1900的博客 2835

博途PLC模糊PID控制(量化因子和比例因子)

参数"量化因子和比例因子",都是为了对清晰值进行比例变换而设置的,其作用是使变量按一定比例进行放大或缩小,以便和我们的模糊论域相匹配完成一一映射。这种变换对整个系统的工作性能也是有影响的。(其实相当于额外引入了比例作用,所以说模糊PID的调节是个系统工程)。限于本人能力,文中难免出现错误和不足,欢迎大家批评和指正。博途PLC的模糊PID控制完整算法可以参看下面这篇文章博途PLC模糊PID控制详解(SCL完整源代码+参数)_RXXW_Dor的博客-优快云博客。......

RXXW_Dor的博客 5269

快速幂算法(全网最详细地带你从零开始一步一步优化)

快速幂算法——带你从零开始一步一步优化 目录 快速幂算法——带你从零开始一步一步优化 什么是快速幂算法 再次思考 快速幂算法初步入门 压榨性能再优化 终极优化 参考资料 博客文章版权声明 什么是快速幂算法 首先,我们先来看一道ACM程序设计题,这道题是杭电OJ中序号为2035的题目,没做过这道题目的同学可以...

扬俊的小屋 20万+

多思计组实验实验三、存储器读写实验

实验三、存储器读写实验

qq_53089329的博客 3651

点云从入门到精通技术详解100篇-基于三维点云的机器人抓取位姿检测(续)

集到的深度信息会存在噪点,因此需要将生成的场景点云进行预处理,获得平滑、降采样处理场景点云,本文设计的预处理操作更能从冗杂的场景点云中提取清晰、平滑的目标点云,便于后续的抓取位姿采样,提高后续算法的处理效率。因此需要对场景点云进行适当的分割,仅保留目标物体的点云,整个过程可以通过。场较小时,空间中的点云密度会更加提高;觉子系统的效率,再保持全局点云几何形状不改变的前提下,通过对目标点云进行。体素降采样可以快速地减少点云数据并同时保持点云的形。个点,由于我们实施抓取的目标物体只占整个场景点云图的一部分,

getusushu的博客 772

算法 —— 快速幂

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

fen_0108的博客 2802

199、影像技术 roadmap 规划:未来移动影像的技术趋势与芯片算力展望

本文探讨了未来移动影像技术的发展趋势与芯片算力规划。作者从实际案例出发,指出影像技术演进需平衡传感器、ISP、算力和功耗。文章分为三部分:1)传感器将从堆像素转向提升信息密度,重点关注双层晶体管结构、混合快门和多光谱技术;2)ISP架构将向可编程计算单元转型,强调神经网络加速、硬件化多帧融合和语义处理;3)芯片算力瓶颈在于数据搬运,需优化存算一体架构、专用DMA和统一内存。最后给出五点建议:避免盲目追高像素、重视持续功耗、平衡ISP灵活性、预留算力余量、加强传感器与ISP协同设计。作者强调,影像技术的突破在

sundong_81的博客 57

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

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

AAA_fanfan的博客 2423

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

矩阵快速幂算法

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

果光的博客 4487

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

weixin_52115456的博客 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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
上一篇: 广度优先搜索bfs
下一篇: map
ZLucker
博客等级 码龄9年 12粉丝 22原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值