快速幂、快速幂取模的分析与代码实现

快速幂 & 大数取模及例题(极其详细) 首先,以杭电OJ的一道题引入话题 人见人爱A ^ B 接着,先给出取模的几个重要结论: (a * b) % p = (a % p * b) % p (a + b) % p = (a % p + b) % p (a + b) % p = (a % p + b % p) % p (a - b)% p = (a % p - b % p) % p (a * b)% p = (a % p * b % p) % p 对于最后一条性质,即多个因子连续的乘积取模的结果等于每个因子取模后的乘积再取模的结果 上题的要求也简 阅读详情

个人博客:快速幂&快速幂取模的分析与代码实现 | Iwts’s blog

写在前面

在网上搜了相关内容,感觉写的都不是特别详细,也没有人讲,只能自己理解了。下面会写一下这3个算法的分析与实现。当然都是基于自己的理解。因为博主搜了很多博客都是没有详细的解释,数学渣一脸懵逼啊。所以关于原理的解释如果有错误请一定要评论我改正!

朴素的求幂算法

也就是平常使用pow函数,最简单的实现就是一直累乘,可以得到这样的代码:

int Pow(int a,int b){
    int ans = 1;
    for(int i = 0;i < b;i++){
        ans *= a;
    }
    return ans;
}

可以看到,算法的时间复杂度是O(n)。为了降低时间复杂度,我们可以使用快速幂算法,将时间复杂度降低到O(logn),n是幂。

快速幂

关于快速幂,博主的理解是使用位运算。下面是数学证明:

关于a^b,举一个实际的例子——2^10。

那么对于6而言,如果我们将10变成二进制,那么就是:1010,如果变成加权的情况可以得到表达式:

0*2^0 + 1*2^1 + 0*2^2 + 1*2^3

代入原来的2^10可以得到表达式:

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

然后再拆开

C++中的快速幂和取余运算实现 取余运算,也称为模运算,是数学中的一种二元运算,表示两个整数相除后的余数。对于任意两个整数a和b(b不为0),存在唯一的整数q和r,满足a = bq + r,并且0 <= r < |b|,这里的q是商,r是余数。取余运算有一些重要的性质:- 当a是正数时,a % b的结果总是非负数。- 当a是负数时,a % b的结果取决于C++标准库的实现,不同的编译器可能有不同的结果,但最常见的是结果也为非负数。- 取余运算不满足交换律,即a % b不一定等于b % a。 阅读详情

相关推荐

偏最小二乘结构方程(PLS-SEM)_TomatoSCI分析日记

①模型整体拟合指标(Goodness-of-Fit, GOF),这个可以看做整体的R方了,上限是1;②指标载荷的具体值;然而,当数据中包含潜变量(即由多个观测指标组合而成的综合概念)时,贝叶斯结构方程不太适用。指标过少(1-2 个)会削弱潜变量的解释力,而指标过多可能增加噪声,影响模型稳定性。如果指标较多,可考虑进一步划分潜变量,但应确保每个指标有意义。掌握这两类方法后,在处理多变量、因果或路径分析研究时,可以根据数据特点与研究需求灵活选择。对于一般的多变量研究,这两类结构方程均为常用且有效的分析方案。

qq_44684643的博客 2011

echarts的坐标轴处理算法

参考原文:https://www.cnblogs.com/vicky-li/p/11653415.html。2、可用于双轴的情况,指定splitNumber,保证左右两边的线没有交叉显示的情况。1、设置echarts显示的最大最小值,让数据显示比较有起伏。处理echarts的一些问题。

HYeeee的博客 801

COMSOL报错调试总结(不定期更新)

COMSOL报错调试总结1. 可定位错误1.1 除零错误1.2 未定义变量值1.3 边界条件/材料属性等缺失2. 难定位错误2.1. 装配期间内存不足 官方给的案例总是非常完美,运行流畅,结果完美。但是自己做模型时候就总是报错,而且不像自己coding的程序那样可以明确定位哪里出了bug。这里把我碰到的一些报错问题以及调试方法记录下来~ 部分来源于以下参考来源: http://wap.sciencenet.cn/blog-1467490-1118453.html?mobile=1 1. 可定位错误 以下错误

jessica0307的博客 8万+

Open3D 机载点云电力线提取【2025最新版】

传统方法实现的机载点云电力线分割提取。博客长期更新,本文最新更新时间为:2025年3月23日。

点云侠的博客 4468

7.1华为OD机试真题 新系统 - 仓库盘点 (Java/Py/C/C++/Js/Go)

7.1华为OD机试真题 新系统 - 仓库盘点 (Java/Py/C/C++/Js/Go)

算法大师! 507

深度学习实战12(进阶版)-利用Dewarp实现文本扭曲矫正

大家好,我是微学A1, 我们在生活中会看到一些拍摄扭曲的图片,我们在通过OCR识别的时候,因为扭曲的厉害,而无法识别,我们需要对图片进行处理。

微学AI的博客 3157

SXU-软件项目管理-朱少民-第九章 项目监控与控制 第十章 项目收尾 附相关习题

软件项目管理-朱少民-第九章 项目监控与控制 附相关习题

weixin_63597914的博客 1488

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

NTscan扫描工具

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: poj-2142 The Balance 扩展欧几里德算法
下一篇: 背包九讲(0)- 写在之前
iwts_poi
博客等级 码龄9年 266粉丝 97原创
评论 14
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值