模运算和快速幂
文章目录
- 模运算
- 快速幂
模运算
模运算是大数运算中的常用操作。如果一个数太大,无法直接输出,或者不需要直接输出,则可以对它取模,缩小数值再输出。取模可以防止溢出,这是常见的操作。
取模运算一般要求a和m的符号一致,即都为正数或都为负数。如果正负不同,那么请小心处理 模运算与基本四则运算有些相似,但是除法例外。其规则如下:
(a + b) % p = (a % p + b % p) % p
(a - b) % p = (a % p - b % p) % p
注意负数取模的问题,尽量保证(a-b)为正数 ,如果a-b为负数 则可以写成
((a-b)%p+p)%p 例如 -3%5=-3 (-3%5+5)%5=2
(a * b) % p = (a % p * b % p) % p
(a^b) % p = ((a % p)^b) % p
模运算例题
public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);long a=scan.nextLong();long b=scan.nextLong();long c=scan.nextLong();long day=0;long x=a*5+b*2;long week=c/x;long last=c%x;if(last>0) {if(last<5*a){long m=last/a;if(last%a>0)day=m+1;elseday=m;}else{last-=5*a;long m=last/b;if(last%b>0)day=5+m+1;elseday=5+m;}}System.out.println(week*7+day);scan.close();}
}
例题代码。
快速幂
1.算法思想
将指数n表示为其二进制形式,例如,n = 13 可表示为 1101。
从二进制形式的最低位开始,逐位检查: 如果当前位为1,则将结果乘以对应的底数的幂 每次将底数的幂平方,即底数的幂乘以自身,同时将指数右移一位。
继续处理下一位,直到所有位都处理完毕,此时得到最终结果。
1、 当指数是偶数时,我们可以让指数除以2,底数乘以底数 2、 当指数是奇数时,我们可以将指数减1变为偶数
当幂%2==0,也就是当幂为偶数时,根据幂的运算法则,我们可以将幂除以2,然后底数进行平方操作,值保持不变。
当幂%2= =1,也就是当幂为奇数时,将幂为奇数的底数保存起来,再对幂-1,重复上面的操作。
最后的结果就是将幂为奇数的底数综合相乘。
long long int quik_power(int base, int power)
{long long int result = 1;while (power > 0) //指数大于0进行指数折半,底数变其平方的操作{if (power % 2 == 1) //指数为奇数{power -= 1; //指数减一power /= 2; //指数折半result *= base; //分离出当前项并累乘后保存base *= base; //底数变其平方}else //指数为偶数{power /= 2; //指数折半base *= base; //底数变其平方}}return result; //返回最终结果
}
效率更高的写法
```java
long long int quik_power(int base, int power)
{long long int result = 1;while (power > 0) //指数大于0进行指数折半,底数变其平方的操作{if (power & 1) //指数为奇数,power & 1这相当于power % 2 == 1result *= base; //分离出当前项并累乘后保存power >>= 1; //指数折半,power >>= 1这相当于power /= 2;base *= base; //底数变其平方}return result; //返回最终结果
}
`


public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);long b=scan.nextLong();long p=scan.nextLong();long k=scan.nextLong();long s=1;while(p>0){if((p&1)==1){s=s*b%k;}b=b*b%k;p>>=1;}System.out.println(s);scan.close();}
}
快速幂
public class Main {static long ksm(long a,long b,long n){long ret=1;while(b>0){if((b&1)==1){ret=ret*a%n;}a=a*a%n;b>>=1;}return ret;}public static void main(String[] args) {Scanner scan = new Scanner(System.in);long a=scan.nextLong();long b=scan.nextLong();long n=scan.nextLong();long x=ksm(10,n+2,b*1000);System.out.println(a*x%(b*1000)/b);scan.close();}
}
小数第n位
不懂可以参考这篇博客小数第n位解析
相关文章:
模运算和快速幂
文章目录 模运算快速幂 模运算 模运算是大数运算中的常用操作。如果一个数太大,无法直接输出,或者不需要直接输出,则可以对它取模,缩小数值再输出。取模可以防止溢出,这是常见的操作。 取模运算一般要求a和m的符号一…...
【机器学习】——神经网络与深度学习:从基础到应用
文章目录 神经网络基础什么是神经网络?神经网络的基本结构激活函数 深度学习概述什么是深度学习?常见的深度学习算法 深度学习的工作流程深度学习的实际应用结论 引言 近年来,神经网络和深度学习逐渐成为人工智能的核心驱动力。这类模型模仿人…...
Unity各个操作功能+基本游戏物体创建与编辑+Unity场景概念及文件导入导出
各个操作功能 部分功能 几种操作游戏物体的方式: Center:有游戏物体父子关系的时候,中心点位置 Global/Local:世界坐标系方向/自身坐标系方向 :调试/暂停/下一帧 快捷键 1.Alt鼠标左键:可以实现巡游角度查看场景 2.鼠标滚轮…...
QT入门教程攻略 QT入门游戏设计:贪吃蛇实现 QT全攻略心得总结
Qt游戏设计:贪吃蛇 游戏简介 贪吃蛇是一款经典的休闲益智类游戏,玩家通过控制蛇的移动来吃掉地图上的食物,使蛇的身体变长。随着游戏的进行,蛇的移动速度会逐渐加快,难度也随之增加。当蛇撞到墙壁或自己的身体时&…...
Linux No space left on device分析和解决
报错解释: "No space left on device" 错误表示你的Linux设备(通常是磁盘分区)上没有剩余空间了。这可能是因为磁盘已满,或者inode已满。磁盘空间是指磁盘上的实际空间,而inode是用来存储文件元数据的数据结…...
Qt实现Halcon窗口显示当前图片坐标
一、前言 Halcon加载图片的窗口,不仅能放大和缩小图片,还可以按住Ctrl键显示鼠标下的灰度值,这种方式很方便我们分析缺陷的灰度和对比度。 二、实现方式 ① 创建显示坐标和灰度的widget窗口 下图的是widget部件,使用了4个label控…...
构建宠物咖啡馆:SpringBoot框架的实现策略
1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理基于Spring Boot的宠物咖啡馆平台的设计与…...
Qt开发环境的搭建
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Qt开发环境的搭建 收录于专栏【Qt开发】 本专栏旨在分享学习Qt的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. Qt开发工具概述 Qt…...
docker-compose查看容器日志和实时查看日志
要查看 docker-compose up 过程中容器启动的错误日志,可以使用以下方法: ### 1. **使用 docker-compose logs 命令** 1. 在终端中进入包含 docker-compose.yml 文件的目录。 2. 运行以下命令来查看所有容器的日志: bash docker-compose…...
MVC、MVP和MVVM之间的区别
MVC(Model-View-Controller)隔开业务和UI(一对一) 角色划分: Model:负责处理数据和业务逻辑,通常包括数据的存储、检索和更新等操作。 View:负责展示用户界面,接收用户输…...
uni-app 打包成app时 限制web-view大小
今天对接一个uni-app的app 内置对方h5 web-view的形式 需要对方在web-view顶部加点东西 对方打的app的web-view始终是全屏的状态,对方表示做不到我要的效果 emmmmmm。。。。。。 于是乎 自己搭了个demo 本地h5跑起来审查了下代码,发现web-view是给绝对定位了 于是乎 我想外层…...
智能指针(2)
目录 答题格式: 几个易错点 可能问法四: 问题分析: 问题解答: 上回文说到,weak_ptr的功能和区别,并且进行了分析,我们接着进行解答。 答题格式: int main() { std::we…...
[含文档+PPT+源码等]精品基于Nodejs实现的家教服务小程序的设计与实现
基于Node.js实现的家教服务小程序的设计与实现背景,主要源于以下几个方面: 一、家教市场的现状与需求 随着教育竞争的日益激烈,家庭对子女教育质量的重视程度不断提升,家教服务已成为许多家庭不可或缺的一部分。然而,…...
electron打包报错-winCodeSign无法下载
electron打包报错-winCodeSign下载问题 问题描述 downloaded urlhttps://registry.npmmirror.com/-/binary/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z duration1.577s⨯ cannot execute causeexit status 2outerrorOutERROR: Cannot create s…...
给Windows系统设置代理的操作方法
一、什么是代理 网络代理是一种特殊的网络服务,允许一个网络终端通过这个服务与另一个网络终端进行非直接的连接,而提供代理服务的电脑系统或其它类型的网络终端被称为代理服务器。 代理服务器是网络信息的中转站,代理服务器就像是一个很大的…...
高质量带货短视频素材来源推荐
在抖音带货时,寻找高质量视频素材至关重要。今天,我为大家分享五个可以下载高清无水印带货短视频素材的网站,帮助你轻松获取灵感和素材! 蛙学网 蛙学网作为国内领先的短视频素材平台,提供多种类的带货短视频素材。无论…...
torchvision.transforms.Resize()的用法
今天我在使用torchvision.transforms.Resize()的时候发现,一般Resize中放的是size或者是(size,size)这样的二元数。 这两个里面,torchvision.transforms.Resize((size,size)),大家都很清楚,会将图像的h和w大小都变成size。 但是…...
简单认识 redis -数据类型命令
一.Redis 键(key) 不能存在相同名称的key //SET KEY_NAME value 设置一个键 127.0.0.1:6379> set runoobkey redis OK 127.0.0.1:6379> get runoobkey redis "redis" //DEL KEY_NAME 删除键 127.0.0.1:6379> DEL redis (integer) 0 127.0.0.1:6379>…...
Python 语言学习——应用1.2 数字图像处理(第二节,变换)
目录 1.基础知识 1.图像几何变换概念 2.图像几何变换方式 3.插值运算 4.几何变换步骤 2.各类变换 1.位置变换 2.形状变换 3.代数运算 3.实战演练 1.基础知识 1.图像几何变换概念 在图像处理过程中,为了观测需要,常常需要对 图像进行几何变换&am…...
【QT Quick】页面布局:手动定位与坐标系转换
在这篇教程中,我们将详细介绍在 QT Quick 中如何手动定位元素以及坐标系转换的概念和应用。手动定位不仅仅是指定 x、y 坐标,更涉及坐标系的管理。我们会从最基本的手动定位开始,逐步扩展到更复杂的坐标系转换操作。 坐标系 默认坐标系&…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
