a 乘 b 模 p_题解

【题解提供者】吴立强

解法一

思路

【快速幂】算法改版题。

面对 a × b m o d p a\times b\mod p a×bmodp 这个结构,直接求必然溢出 long long,任何基本结构都不好使。

模仿快速幂算法是先将 b b b 二进制分解(假设 b b b 的二进制表示为 b 59 b 58 b 57 . . . b 2 b 1 b 0 b_{59}b_{58}b_{57}...b_2b_1b_0 b59b58b57...b2b1b0),那么就有:

a × b = ∑ i = 0 59 ( b i × a × 2 i ) a\times b = \sum _{i=0}^{59}(b_i\times a\times {2^i}) a×b=i=059(bi×a×2i)

由于加法取模可以对加法各部分先取模,所以有:

a × b m o d p = ( ∑ i = 0 59 ( ( b i × a × 2 i ) m o d p ) ) m o d p a\times b\mod p = (\sum _{i=0}^{59}((b_i\times a\times {2^i})\mod p))\mod p a×bmodp=(i=059((bi×a×2i)modp))modp

通过上面的式子,我们将原本的 a × b a\times b a×b 经由 b b b 的二进制拆分转化成了 60 个(因为 2 60 > 1 0 18 2^{60} > 10^{18} 260>1018)子结构的乘积,如果可以较为快速的处理出这 60 个子结构的值,那么原式的值也就求出来了。

b b b 的二进制拆分并不难,而 a a a 则需依次求解出 a × 1 , a × 2 , a × 4 , a × 8... a\times 1,a\times 2,a\times 4,a\times 8... a×1,a×2,a×4,a×8...,注意到其每一项都是前一项的两倍,通过递推也就可以做到依次求解了。

代码

#include <iostream>
using namespace std;
typedef long long ll;int main() {ll a, b, p;cin >> a >> b >> p;ll ans = 0;while(b) {if(b & 1) ans = (ans + a) % p;a = (a + a) % p;b >>= 1;}cout << ans;return 0;
}

算法分析

本算法的时间复杂度为 O ( log ⁡ ( b ) ) O(\log(b)) O(log(b))

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

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

相关文章

SparkUI任务启动参数介绍(148个参数)

SparkUI任务启动参数介绍&#xff08;148个参数&#xff09; 1 spark.app.id: Spark 应用程序的唯一标识符。 2 spark.app.initial.jar.urls: Spark 应用程序的初始 Jar 包的 URL。 3 spark.app.name: Spark 应用程序的名称。 4 spark.app.startTime: Spark 应用程序的启动时间…

在Angular中创建自定义管道

Angular 2 中的管道 在 Angular 2 中&#xff0c;管道是一种很好的方式&#xff0c;可以在模板中直接对数据进行转换和格式化。Angular 默认提供了一些管道&#xff0c;用于处理日期、货币、百分比和字符大小写&#xff0c;但你也可以很容易地定义自己的自定义管道。以下是一个…

【深度学习每日小知识】全景分割

全景分割 全景分割是一项计算机视觉任务&#xff0c;涉及将图像或视频分割成不同的对象及其各自的部分&#xff0c;并用相应的类别标记每个像素。与传统的语义分割相比&#xff0c;它是一种更全面的图像分割方法&#xff0c;传统的语义分割仅将图像划分为类别&#xff0c;而不…

【旧文更新】【优秀毕设】人脸识别打卡/签到/考勤管理系统(OpenCV+最简基本库开发、可移植树莓派 扩展网络图像推流控制 验证码及Excel邮件发送等功能)

【旧文更新】【优秀毕设】人脸识别打卡/签到/考勤管理系统&#xff08;OpenCV最简基本库开发、可移植树莓派 扩展网络图像推流控制 验证码及Excel邮件发送等功能&#xff09; 文章目录 关于旧文新发毕设结构主页面验证码识别效果管理页面人脸信息采集管理实时数据更新签到结果…

IIC--集成电路总线

目录 一、IIC基础知识 1、设计IIC电路的原因&#xff1a; 2、上拉电阻阻值怎么确定 3、IIC分类 4、IIC协议 二、单片机使用IIC读写数据 1、 IIC发送一个字节数据&#xff1a; 2、IIC读取一个字节数据&#xff1a; 一、IIC基础知识 1、设计IIC电路的原因&#xff1a; (…

Windows 环境下 Redis 的安装和基本使用

Windows 环境下 Redis 的安装和基本使用 Windows 环境下 Redis 的安装和基本使用Redis 简介基本数据结构Redis 的下载、解压、添加环境变量运行GUI&#xff1a;RedisInsight参考链接 Windows 环境下 Redis 的安装和基本使用 Redis 简介 Redis 是完全开源的&#xff0c;遵守 B…

OpenCV-41 使用掩膜的直方图

一、掩膜 掩膜即为与原图大小一致的黑底白框图。 如何生成掩膜&#xff1f; 先生成一个全黑的和原始图片大小一样大的图片。mask np.zeros(img.shape, np.uint8)将想要的区域通过索引方式设置为255.mask[100:200, 200:300] 示例代码如下&#xff1a; import cv2 import ma…

11-编写自动化测试

上一篇&#xff1a; 10-通用类型、特质和生命周期 Edsger W. Dijkstra 在 1972 年发表的文章《The Humble Programmer》中说&#xff1a;"程序测试可以非常有效地显示错误的存在&#xff0c;但对于显示错误的不存在却无能为力。这并不意味着我们不应该尽可能多地进行测试&…

23种设计模式之:命令模式

命令模式是一种行为设计模式&#xff0c;它将一个请求封装成一个对象&#xff0c;从而让你使用不同的请求、队列或者请求的日志来参数化其他对象。它也支持可撤销的操作。命令模式的关键是引入了抽象层——命令接口&#xff0c;具体命令实现该接口&#xff0c;执行操作的对象从…

紫微斗数双星组合:天机太阴在寅申

文章目录 前言内容总结 前言 紫微斗数双星组合&#xff1a;天机太阴在寅申 内容 紫微斗数双星组合&#xff1a;天机太阴在寅申 性格分析 天机星与太阴星同坐寅申二宫守命的男性&#xff0c;多浪漫&#xff0c;易与女性接近&#xff0c;温柔体贴&#xff0c;懂得女人的心理。…

IO流---缓冲流,转换流,打印流,序列化流

缓冲流 缓冲流&#xff08;Buffered Stream&#xff09;也被称为高效流&#xff0c;它是对基本的字节字符流进行增强的一种流。通过缓冲流&#xff0c;可以提高数据的读写能力。 在创建缓冲流对象时&#xff0c;会创建一个内置的默认大小的缓冲区数组。通过对缓冲区的读写&…

2024.2.10 HCIA - Big Data笔记

1. 大数据发展趋势与鲲鹏大数据大数据时代大数据的应用领域企业所面临的挑战和机遇华为鲲鹏解决方案2. HDFS分布式文件系统和ZooKeeperHDFS分布式文件系统HDFS概述HDFS相关概念HDFS体系架构HDFS关键特性HDFS数据读写流程ZooKeeper分布式协调服务ZooKeeper概述ZooKeeper体系结构…

[uniapp生命周期]详细讲解uniapp中那些属于vue生命周期,那些属于uniapp独有的生命周期,以及这中间的区别 相关的内容和api 代码注释

目录 1. Vue.js生命周期函数2.Vue生命周期函数代码beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyed$nextTick$forceUpdate$destroy 3. UniApp独有的生命周期函数onLaunchonShowonHideonError 4.总结 在UniApp中&#xff0c;除了Vue.js的生命周…

[职场] 会计学专业学什么 #其他#知识分享#职场发展

会计学专业学什么 会计学专业属于工商管理学科下的一个二级学科&#xff0c;本专业培养具备财务、管理、经济、法律等方面的知识和能力&#xff0c;具有分析和解决财务、金融问题的基本能力&#xff0c;能在企、事业单位及政府部门从事会计实务以及教学、科研方面工作的工商管…

【摸鱼日常】使用Docker部署RPG网页小游戏

一、本次实践介绍 1. 本次实践简介 本次实践部署环境为个人测试环境&#xff0c;快速使用docker部署RPG网页小游戏。 rootWellDone:/home/goodjob# uname -a Linux WellDone 6.5.0-14-generic #14~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Nov 20 18:15:30 UTC 2 x86_64 x86_…

Linux:docker搭建redis集群(3主3从扩容缩容 哈希槽分配)

操作系统&#xff1a;centos7 docker-ce版本&#xff1a;24.0.7 1.准备redis镜像 我这里使用redis 6.0.8 镜像进行操作&#xff0c;如果你也需要镜像&#xff0c;在网络正常情况下直接使用 docker pull redis:6.0.8 即可进行下载&#xff0c;如果你没配置国内加速器&#x…

DS:八大排序之直接插入排序、希尔排序和选择排序

创作不易&#xff0c;感谢三连支持&#xff01;&#xff01; 一、排序的概念及运用 1.1 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起 来的操作。稳定性&…

2402,如何正确的最佳方式对付新冠

这几天,连着发了几天的烧,配合感冒冲剂,荆防颗粒,同新冠进行了5次2小时的斗争. 最后,我发现,同新冠直接斗争,是很傻的行为. 为啥,我要直接同新冠斗争呢? 为啥不让新冠同环境中的消毒剂斗争呢?消毒剂是化学药品,病毒最怕的就是这些玩意! 只要我的局部环境充满了消毒剂,新冠要同…

leetcode:96.不同的二叉搜索树

解题思路&#xff1a; 输入n3 n 0 1个 n 1 1个 n 2 2个 头1头2头3 头1 左子树0节点&#xff08;个数&#xff09;x右子树2个节点&#xff08;个数&#xff09; 头2 左子树1节点&#xff08;个数&#xff09;x右子树1个节点&#xff08;个数&#xff09; 头3 左子…

操作字符串之子串削除-11-${string%%substring}

1.${string%%substring} 从$string的结尾位置截掉最短匹配的$substring 2.实例 操作字符串样例&#xff1a;string123ABCabc456xyzabc 字符串操作默认从右边开始进行 命令&#xff1a; echo ${string%%a*c} [rootkibana ~]# echo ${string%%a*c} 123ABC #从$string的结尾…