python中模运算_Python中的模运算

所谓取模运算,就是计算两个数相除之后的余数,符号是%。如a % b就是计算a除以b的余数。用数学语言来描述,就是如果存在整数n和m,其中0 <= m < b,使得$ a = n * b + m $,那么$ a \% b = a - n * b = m $。

先测试几个例子:

print(9%5) # 4

print(-9%5) # 1

print(9%-5) # -1

print(-9%-5) # -4

可以看到,数值部分虽然相同,但是正负符号的四种不同组合,会产生完全不同的四种结果。那么这里面有什么规律吗?

实际上,虽然结果不一样,不过取模运算完全遵从统一的规则:

其中$\lfloor\frac{a}{b}\rfloor$表示a除以b的结果向下取整。

比如$9\%5$,先计算$\lfloor\frac{9}{5}\rfloor$,向下取整得到1,然后计算$9-1*5$,得到4;

同理$-9\%5$,先计算$\lfloor\frac{-9}{5}\rfloor$,向下取整得到-2,然后计算$-9-(-2*5)$,得到1;

再来看$9\%-5$:

最后是$-9\%-5$:

虽然知道结果是如何计算出来的,不过人脑不比电脑,这样计算未免太复杂,为避免给大脑增加负担,再根据上面的规则,这里我总结了一个简单的记忆方法:

对于不带负号的,2个数字都是正数的,直接求结果,这个应该来说是比较简单的,而且无论符号是什么,我们都只计算这个值;

对于有负号的,不管负号在哪个数字,都去除负号,然后计算步骤1的结果;

接下来根据负号的位置分为3种情况,假设除数是K,去掉负号后取模的结果是M:2个数都是负数,直接等于-M

被除数是负数,除数是正数,由于是向下舍入,最后相当于会多加上一个K,也就是说模一定是大于0的,结果是K-M

被除数是正数,除数是负数,刚好相反,结果是M-K,注意这里的K是除数的绝对值,是正数

简单归纳:

不管有没有负数,先按正数求模得到M

2个数都为负数,结果是-M

只有1个数为负数,负数在上,记住结果一定是正的,大数-小数(除数-余数),那么就是K-M

只有1个数为负数,负数在下,记住结果一定是负的,小数-大数(余数-除数),那么就是M-K

注:此规律的前提是除的结果一定是向下取整,如果你用java去套这个规律会发现完全行不通。

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

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

相关文章

伟大公司为什么需要技术型领导?

Facebook前工程总监黄易山撰写了一系列文章&#xff0c;很好地总结了Facebook卓越研发文化中的宝贵经验。本文是这一系列文章的第五篇&#xff0c;也是最后一篇。 何谓技术型领导 所有从外部聘用的管理人员包括技术部门负责人&#xff0c;都必须能够编写代码&#xff0c;并且…

css样式变 及实际用法

<html xmlns"http://www.w3.org/1999/xhtml"><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title>引入外部样式</title><link rel" stylesheet" href"home.css&…

服务器部署的参数文档,服务器参数配置

服务器参数配置 内容精选换一换源端服务器迁移至华为云后&#xff0c;最终将迁移到弹性云服务器上。因此在迁移前&#xff0c;您需要在华为云中创建一个或多个弹性云服务器。进入“弹性云服务器”页面。关于参数的详细信息&#xff0c;请参见购买弹性云服务器。Windows系统的目…

扩散法及其改进

扩散法是一种静态路由算法,每一个输入的分组都被从除输入线路之外的所有其它线路上转发出去.扩散法显然会产生大量的分组副本,因此必须有一些办法来抑制无限的转发.1.一种办法是在分组头中携带一个跳数计数器,分组每到一个节点其跳数计数器就减1,当计数器为0时分组被丢弃.计数器…

h5页 点击返回时关闭_在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口...

最近在使用微信、支付宝、百度钱包实现网页支付&#xff0c;对支付成功将自动关闭页面&#xff0c;对于支付失败&#xff0c;将显示错误信息。当在错误页面的时候&#xff0c;点击返回或者Android物理按键上一步的时候&#xff0c;将关闭页面。在微信、支付宝、百度钱包中&…

串操作指令

串操作指令可以方便对一组连续的数据进行操作。串操作后自动根据DF标志位修改ESI和EDI&#xff0c;DF 0时&#xff0c;ESI&#xff0c;EDI递增&#xff0c;DF 1时&#xff0c;ESI&#xff0c;EDI递减。串操作指令有2组&#xff0c;1组实现数据串传送&#xff0c;另1组实现数据…

IS-IS基本配置

实验内容&#xff1a;现在网络中有4台路由器&#xff0c;用户希望利用这4台路由器通过IS-IS协议实现网络互联&#xff0c;并且因为R1和R2性能相对较低&#xff0c;所以还要使这两台路由器处理的数据信息相对较少。 网络拓扑&#xff1a; 实验分析&#xff1a; 根据题意可知R1和…

高并发高流量网站架构

Web2.0的兴起&#xff0c;掀起了互联网新一轮的网络创业大潮。以用户为导向的新网站建设概念&#xff0c;细分了网站功能和用户群&#xff0c;不仅成功的造就了一大批新生的网站&#xff0c;也极大的方便了上网的人们。但Web2.0以用户为导向的理念&#xff0c;使得新生的网站有…

多处理机的进程调度方式

一.自调度方式 二.成组调度方式 三.专用处理机分配方式

枚举类型用法_Mybatis-plus常见用法总结三

前面已经介绍了Mybatis-plus基本用法&#xff0c;今天为大家分享一些Mybatis-plus高级应用逻辑删除自动注入枚举类型处理Sql注入器多租户表结构CREATE TABLE sys_role ( id varchar(64) NOT NULL COMMENT 主键, code varchar(64) NOT NULL DEFAULT COMMENT 角色编码, name …

NOIP 2011 Day2

tags: 贪心模拟NOIP categories:信息学竞赛总结计算系数 Solution 根据二项式定理,\[ \begin{align} (ab)^n\sum_{k0}^nC_{n}^{k}a^kb^{n-k} \end{align} \] 那么\[ \begin{align}(axby)^k&\sum_{p0}^kC_{k}^p(ax)^p(by)^{k-p}\\ &\sum_{p0}^k(C_{k}^pa^pb^{k-p})x^py^…

VS Code的golang开发配置 之 代码提示

之前用VS Code的时候&#xff0c;发现自己的代码的提示一直不好&#xff0c;换用JetBrain的Goland的代码提示是好了&#xff0c;但是比较占用资源。在网上找了一些资料&#xff0c;发现很多人也是遇到第三方或者自己的代码无法提示的情况&#xff0c;但是都没有下文了。后来发现…

使用oprofile分析性能瓶颈

使用oprofile分析性能瓶颈 1. 概述oprofile 是 Linux 平台上&#xff0c;类似 INTEL VTune 的一个功能强大的性能分析工具。其支持两种采样(sampling)方式&#xff1a;基于事件的采样(event based)和基于时间的采样(time based)。基于事件的采样是oprofile只记录特定事件&#…

什么是死锁

死锁是多个进程在运行过程中因竞争资源时产生的一种僵局。 各并发资源彼此等待对方拥有的资源&#xff0c;且在得到对方资源前不释放自己的资源。

python数据工程师 面试题_阿里P7工程师耗时两天整理的292道python大厂面试题,内含解析!...

前言相对于python大家应该都不会陌生吧&#xff01;现在java跟python可以算的是势均力敌了&#xff0c;所以现在学习python 的小伙伴也是越来越多了&#xff0c;可是学完之后就能找到称心如意的工作了吗&#xff1f;很多小伙伴学习Python的时候感觉很简单&#xff0c;但是到了去…

数组复制

在Java里面,可以用复制语句”AB”给基本类型的数据传递值,但是如果A,B是两个同类型的数组&#xff0c;复制就相当于将一个数组变量的引用传递给另一个数组&#xff1b;如果一个数组发生改变&#xff0c;那么引用同一数组的变量也要发生改变。 1.使用FOR循环,将数组的每个元素复…

IntelliJ IDEA 对于generated source的处理

IntelliJ IDEA 对于generated source的处理 学习了&#xff1a;https://stackoverflow.com/questions/5170620/unable-to-use-intellij-with-a-generated-sources-folder 如果有generated source &#xff0c;例如使用gRPC过程中生成的&#xff0c;可以使用鼠标右键点击使之成为…

产生死锁的原因

一 竞争资源&#xff0c;但是资源的数目不能满足进程的需要。 二 进程间推进顺序非法&#xff0c;进程在运行过程中请求和释放资源的顺序不当。

fabric shim安装合约_hyperledger fabric 开发第一个智能合约

一、编写智能合约代码HelloWorld.go&#xff0c;go语言实现&#xff0c;代码很简单&#xff0c;每个合约包含两个方法&#xff0c;Init、Invoke。package mainimport ("fmt""github.com/hyperledger/fabric/core/chaincode/shim""github.com/hyperled…

不能干一辈子开发???

程序员的职业生涯之我见 总是听到下面的论调 程序员干不了一辈子&#xff01; 程序员怎么也不能干一辈子吧&#xff01; 在中国程序员还能干一辈子&#xff1f; 过了&#xff08;30&#xff09;40我就干不动程序员了&#xff01; 每每听…