C++ 算法学习——1.8 快速幂算法

news2024/10/12 5:26:42

背景知识:

1.位运算

在C++中,位运算是对整数类型的位进行操作的一种运算方式。常见的位运算符包括按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<<)和右移(>>)等。这些运算符可以用来对整数的二进制表示进行操作,实现一些特定功能。下面是对常见位运算操作的简要解释:

  1. 按位与(&):将两个数的对应位都为1的情况下得到1,否则为0。

    例如:5 & 3 的结果是 1,因为 5 的二进制表示是 1013 的二进制表示是 011,按位与后得到 001,即 1

  2. 按位或(|):将两个数的对应位只要有一个为1就得到1,否则为0。

    例如:5 | 3 的结果是 7,因为 5 的二进制表示是 1013 的二进制表示是 011,按位或后得到 111,即 7

  3. 按位异或(^):将两个数的对应位相异时得到1,相同时得到0。

    例如:5 ^ 3 的结果是 6,因为 5 的二进制表示是 1013 的二进制表示是 011,按位异或后得到 110,即 6

  4. 取反(~):对操作数的每一位取反(0变1,1变0)。

    例如:~5 的结果是 -6,因为 5 的二进制表示是 000...0101,取反后得到 111...1010,这是补码表示,转换为十进制即为 -6

  5. 左移(<<):将一个数的二进制表示向左移动指定的位数。

    例如:5 << 1 的结果是 10,因为将 5 的二进制表示 101 向左移动一位得到 1010,即 10

  6. 右移(>>):将一个数的二进制表示向右移动指定的位数。

    例如:5 >> 1 的结果是 2,因为将 5 的二进制表示 101 向右移动一位得到 10,即 2

 2.快速幂的原理

快速幂算法的基本思想是利用二进制分解来减少运算次数。具体步骤如下:

  1. 将指数 n 转化为二进制形式。
  2. 从二进制形式的最低位开始,依次检查每一位:
    • 如果该位为 1,则乘以当前的幂值 base
    • 如果该位为 0,则不进行乘法操作。
  3. 每次处理完一位,将底数 base 自乘一次,表示底数的幂次增加一倍。
  4. 继续处理下一位,直到处理完所有位。

 举个例子:

计算 3^5,以下是上述抽象过程的演示:

  1. 首先,将指数 5 转换为二进制形式:5 的二进制表示为 101。

  2. 从二进制形式的最低位开始逐位处理:

    • 初始时,底数为 3,ans为 1。
    • 第一位为 1,ans乘以当前的幂值 3:结果为 3。base自乘一次为9。
    • 第二位为 0,不进行乘法操作,底数自乘一次:底数变为81,ans不动。
    • 第三位为 1,ans乘以当前的底数81,ans变为3×81=243。

其次引入核心问题。

P1. 洛谷p1226快速幂

long long fastPowerMod(long long base, long long exponent, long long c) {
    long long result = 1;
    
    base = base % c;  // Take base mod c to handle large base values
    
    while (exponent > 0) {
        if (exponent & 1) {  // Check if the current bit is 1
            result = (result * base) % c;
        }
        
        base = (base * base) % c;  // Square the base and take mod c
        exponent = exponent >> 1;  // Shift the bits of the exponent to the right
    }
    
    return result;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2207078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity MVC框架1-2 实战分析

该课程资源来源于唐老狮&#xff0c;吃水不忘打井人&#xff0c;不胜感激 Unity MVC框架演示 1-1 理论分析-CSDN博客 首先你需要知道什么mvc框架&#xff0c;并且对三个层级有个比较清晰的认识&#xff0c;当然不清楚也好&#xff0c;下面例子中将会十分细心地让你理解&#x…

“CFD+水务”,积鼎通用流体仿真软件VirtualFlow助力水处理能力提升

在快速发展的现代社会中&#xff0c;水务行业作为城市基础设施的重要组成部分&#xff0c;其高效、安全、可持续的运营直接关系到民众的生活质量与城市的健康发展。随着科技的进步&#xff0c;CFD技术正逐步渗透到水务行业的各个角落&#xff0c;以其独特的模拟预测能力&#x…

软件测试学习笔记丨质量门禁 - SonarQube

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/32486 一&#xff0c;质量门禁概念 质量门禁是为了控制达标率的检查任务设置质量门禁的好处 通过检查达标状态来评估产品质量&#xff0c;控制产品发布利用自动化任务来控制产品的代码质量&a…

构建高效互通的数字桥梁:香港服务器托管指南

在当今全球化日益加深的商业环境中&#xff0c;出海企业面临着前所未有的机遇与挑战。为了确保国内外业务的顺畅运行&#xff0c;特别是在实现国内外数据高效互通、低延迟访问方面&#xff0c;选择一家合适的香港服务器机房进行托管成为了许多企业的关键决策之一。香港&#xf…

科研绘图系列:R语言蝴蝶图(Butterfly Chart)

文章目录 介绍加载R包数据函数画图系统信息介绍 蝴蝶图(Butterfly Chart),也被称为龙卷风图(Tornado Chart)或双轴图(Dual-Axis Chart),是一种用于展示两组对比数据的图表。这种图表通过在中心轴两侧分别展示两组数据的条形图,形似蝴蝶的翅膀,因此得名。蝴蝶图的特点…

ORM 框架 查询相关函数

1、Ubuntu 实时查看 Mysql 数据库日志 sudo tail -f /var/log/mysql/mysql.log2、Django 的 ORM 3、查询相关函数 4、get filter exclude 方法可以增加条件 &#xff08;1&#xff09;条件格式&#xff1a; 模型类属性名__条件值值 &#xff08;2&#xff09;示例代码 # 在…

Spark优化-缓存和checkpoint

目录 缓存使用 checkpoint使用 两者的区别 如下图,如果不适用缓存,rdd3的数据需要经过两次计算,而每次计算也是在内存中计算,很消耗内存,而使用了缓存,可以直接从缓存中直接获取数据,不需要每次对rdd2进行计算 缓存和checkpoint也叫作rdd的持久化&#xff0c;将rdd的数据存储…

快速总结ACmix

ACMix&#xff1a;On the Integration of Self-Attention and Convolution 卷积和自注意力模块通常遵循不同的设计范式&#xff1a; 传统卷积根据卷积滤波器权重利用局部感受野上的聚合函数&#xff0c;这些权重在整个特征图中共享。 内在特性对图像处理施加了至关重要的归纳…

Linux入门:进程状态与优先级

文章目录 一. OS进程状态1.1 一般分类1.2 运行状态1.3 阻塞状态1.4 挂起状态1.5 并行与并发 二. Linux进程状态2.1 分类2.1.1 R状态2.1.2 S状态2.1.3 D状态2.1.4 T状态与t状态2.1.6 X状态 2.2 僵尸状态&#xff08;Z&#xff09;2.2.1 概念2.2.2 查看状态 三. 进程的优先级3.1 …

6N137S1取反电路图

文章目录 一、前言二、6N137S1性能介绍三、应用电路图 一、前言 在硬件电路设计中需要用到隔离电路&#xff0c;但此引脚输出为WS2812的信号&#xff0c;频率有840khz&#xff0c;所以需要使用逻辑光耦&#xff0c;选用6N137S1光耦&#xff0c;速率能达到10Mhz&#xff0c;能满…

Python+Flask接口判断身份证省份、生日、性别、有效性验证+docker部署+Nginx代理运行

这里写目录标题 一、接口样式二、部署流程2.1 镜像打包2.1.1 准备工作2.1.2 build打包2.1.3 dokcer部署运行2.1.4 Nginx代理 三、代码及文件3.1 index.py3.2 areaCodes.json3.3 Dockerfile 一、接口样式 https://blog.henryplus.cn/idcardApi/idCard/query?idcard{idcard} 二、…

anatraf网络性能监控与故障排除

目录 网络性能监控的必要性 1. 提前预警问题 2. 快速响应与故障排除 网络故障排除的常见场景 1. 带宽不足导致的网络卡顿 2. IP冲突引发的网络中断 3. 网络设备故障 结语 随着现代企业对网络依赖性的日益增强&#xff0c;网络性能监控&#xff08;Network Performance …

进口磁力仪G882SX和原装G882究竟有什么区别?

Geometrics公司的铯光泵磁力仪G882有两个型号&#xff1a;一个是出口型号G882SX&#xff0c;另一个是原装型号G882&#xff0c;出口型号的噪声水平比原装型号高一个量级。国内搞磁力仪的专业人士认为进口型号故意加了噪声。 ​ 在之前的博文《如何利用matlab对G882数据进行频谱…

SpringCloud Alibaba-01 入门简介

1.Spring Cloud Alibaba 是由阿里巴巴结合自身丰富的微服务实践而推出的微服务开发的一站式解决方案。它是 Spring Cloud 生态中的第二代实现&#xff0c;提供了包括服务注册与发现、分布式配置管理、服务限流降级、消息驱动能力、阿里云对象存储、分布式任务调度等在内的多种功…

打开cad自动新建一个图纸

命令栏输入&#xff1a;startmode,改为0 即为自动打开cad新建一个图纸。 改为2&#xff0c;即不会新建图纸。

高效录制 PPT 秘籍:四款卓越录屏软件深度解析

一、引言 在现代工作、学习与知识传播的多元场景中&#xff0c;PPT 已然成为不可或缺的信息载体。将 PPT 内容录制下来&#xff0c;其用途广泛&#xff0c;从教师精心打造线上教学课件&#xff0c;到职场精英分享项目方案&#xff0c;再到培训师筹备培训素材等。而获取优质的 P…

来电无通话界面问题分析

1、问题描述 场测反馈&#xff0c;无法接到电话&#xff0c;被叫失败。 2、Log分析 从Modem log看&#xff0c;空口确实有上报到有相关通话信息 排查AT相关Log&#xff0c;确实有上报AT< EAIC相关命令 查看相关AT指令 /* * EAIC: <call_id>,<number>,<type…

Centos 7.9NFS搭建

原创作者&#xff1a;运维工程师 谢晋 Centos 7.9NFS搭建 NFS服务端安装客户机访问共享配置 NFS服务端安装 SSH连接系统登录到服务端安装nfs服务 # yum -y install nfs-utils2. 安装完成后&#xff0c;查看需要共享的目录&#xff0c;这边共享的是/home目录&#xff0c;如…

C#里在使用DataGridView的过程中,当需要让某行数据进行居中显示

在使用DataGridView的过程中,当需要让某行数据进行居中显示,又需要怎么样来实现的呢? 由于DataGridView显示的过程,最上面一行显示的内容取决于FirstDisplayedCell属性, 因此只要设置这个属性,那么这一行就会显示到列表最顶端上。 要让指定的行显示在中间位置,那么还需要…

ICT产业新征程:深度融合与高质量发展

在信息时代的浪潮中&#xff0c;每一场关于技术革新与产业融合的盛会都闪耀着智慧的光芒&#xff0c;引领着未来的方向。9月25日&#xff0c;北京国家会议中心内&#xff0c;一场聚焦全球信息通信业的顶级盛事——第32届“国际信息通信展”&#xff08;PT展&#xff09;隆重拉开…