整除运算的不同定义,取余运算与取模运算的区别与联系

数学中整除及余数的定义
设a,b是两个整数,且b≠0,则存在唯一的整数q和r使得: a = q × b + r ( 0 ≤ r < ∣ b ∣ ) a=q×b+r(0≤r<|b|) a=q×b+r0r<b)
该式叫做带余除法,记余数 r = a m o d b r = a\ mod\ b r=a mod b
数学中的余数一定是非负整数。

数学中(以及python中),整除商为实数商向下取整。
q = ⌊ a b ⌋ q = \lfloor \frac{a}{b} \rfloor q=ba
C++/Java/C#/JavaScript中,整除商为实数商向0取整。
q = ⌊ a b ⌋ ( a b ≥ 0 ) , q = ⌈ a b ⌉ ( a b < 0 ) q=\lfloor \frac{a}{b} \rfloor(\frac{a}{b}\ge0),q=\lceil \frac{a}{b} \rceil(\frac{a}{b}<0) q=baba0)q=baba<0)
余数都为 r = b ∗ q − a r = b*q-a r=bqa
因此两种整除定义下的余数不同。
例:

− 7 ÷ 2 = − 3.5 -7÷2 = -3.5 7÷2=3.5
商向0取整: − 7 = − 3 ∗ 2 − 1 -7 = -3*2-1 7=321,即 − 7 ÷ 2 = − 3...... − 1 -7÷2 = -3......-1 7÷2=3......1(C++取模)
商向下取整: − 7 = − 4 ∗ 2 + 1 -7 = -4*2+1 7=42+1,即 − 7 ÷ 2 = − 4 … … 1 -7÷2 = -4……1 7÷2=4……1(数学取余)

使用C++代码完成数学取余,求a mod b:
商向0取整,则除法等式为 a ÷ b = c . . . . . . d a÷b=c......d a÷b=c......d,其中 d = a % b d=a\%b d=a%b,%为C++取模运算。
满足 a = c ∗ b + d a = c*b+d a=cb+d
商向下取整,除法等式为 a ÷ b = e . . . . . . f a÷b=e......f a÷b=e......f,其中 f = a m o d b f = a\ mod\ b f=a mod b,mod为数学取余运算。
满足 a = e ∗ b + f a = e*b+f a=eb+f
因此有: c ∗ b + d = e ∗ b + f c*b+d = e*b+f cb+d=eb+f
如果 d > 0 d>0 d>0,那么 f = d f=d f=d,此时 a m o d b = a % b a\ mod\ b=a\%b a mod b=a%b
如果 d = 0 d=0 d=0,那么 f = 0 f=0 f=0,此时 a m o d b = a % b a\ mod\ b=a\%b a mod b=a%b
如果 d < 0 d<0 d<0,由于数学中余数不能为负,所以将等式调整为余数大于等于0。

  • 如果除数 b > 0 b>0 b>0,则调整为 c ∗ b + d = ( c − 1 ) ∗ b + ( d + b ) c*b+d = (c-1)*b+(d+b) cb+d=(c1)b+(d+b),因此 f = d + b f=d+b f=d+b,此时 a m o d b = a % b + b a\ mod\ b=a\%b+b a mod b=a%b+b
  • 如果除数 b < 0 b<0 b<0,则调整为 c ∗ b + d = ( c + 1 ) ∗ b + ( d − b ) c*b+d=(c+1)*b+(d-b) cb+d=(c+1)b+(db),因此 f = d − b f=d-b f=db,此时 a m o d b = a % b − b a\ mod\ b = a\%b-b a mod b=a%bb
  • 综合以上两种情况, a m o d b = a % b + ∣ b ∣ a\ mod\ b = a\%b+|b| a mod b=a%b+b

综合以上所有情况,在各种情况下都满足 a m o d b = ( a % b + ∣ b ∣ ) % b a\ mod\ b=(a\%b+|b|)\%b a mod b=(a%b+b)%b
即C++中求a mod b的写法为:(a%b+abs(b))%b
(当b为long long类型时,需要自己写求long long类型绝对值的函数)。

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

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

相关文章

扭蛋机小程序:深度探索虚拟寻宝之旅的乐趣

引言 扭蛋机小程序&#xff0c;这个融合了传统与创新的虚拟寻宝乐园&#xff0c;已经吸引了无数玩家的目光。在这个充满惊喜和挑战的虚拟世界里&#xff0c;每一个扭蛋都可能蕴藏着无尽的宝藏。本文将带您深入探索扭蛋机小程序的魅力所在&#xff0c;体验一场别开生面的虚拟寻…

端开发技术——Flutter富文本组件

简介 flutter 富文本组件。 github地址&#xff1a; https://github.com/ThinkerJack/jac_uikit 使用方式 运行 flutter pub add jac_uikit组件文档 使用方式&#xff1a; HighlightedTextWidget.builder(text: "全部文案包含高亮文案测试用",highlights: [Hig…

编程入门笔记:从基础到进阶的探索之旅

编程入门笔记&#xff1a;从基础到进阶的探索之旅 编程&#xff0c;作为现代科技的基石&#xff0c;正日益渗透到我们生活的方方面面。对于初学者来说&#xff0c;掌握编程技能不仅有助于提升解决问题的能力&#xff0c;还能开启通往创新世界的大门。本篇文章将从四个方面、五…

企业常用的五大源代码加密软件

安秉源代码加密软件&#xff1a; 专注于源代码文件的加密&#xff0c;对编译后的文件不加密。 采用版本管理服务器密文保存方式&#xff0c;不影响员工正常开发流程。 有效防止代码从版本管理服务器下载和上传到私有仓库。 适用于企业环境&#xff0c;保护源代码不被泄露。EXEC…

【机器学习】CART决策树算法的核心思想及其大数据时代银行贷款参考案例——机器认知外界的重要算法

目录 引言 概述 CART决策树的特点 核心思想 减少不确定性的指标 基尼系数&#xff08;Gini Index&#xff09; 分类错误率 熵 银行实例 背景 数据准备 模型构建 模型评估与优化 应用与结果 代码示例 ✈✈✈✈引言✈✈✈✈ CART算法既可以用于分类问题&#xff0…

攻防演练“轻装上阵” | 亚信安全信舱ForCloud 打造全栈防护新策略

网络世界攻防实战中&#xff0c;攻击风险已经从代码到云横跨全栈技术点&#xff0c;你准备好了吗 云服务器&#xff0c;攻击众矢之的 2022年超过38万个Kubernetes API服务器暴露公网&#xff0c;成为攻击者目标。云服务器&#xff0c;尤其是开源设施&#xff0c;一直以来不仅是…

Android可穿戴设备世界之旅

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 介绍 Android通过在电视、穿戴和汽车等各种电子模块中扩展下一代应用开发概念&#xff0c;扩展了其整个范围和可…

vue大作业-实现学校官网

vue大作业-实现学校官网 基于vue2实现的学校官网 项目展示 学校官网介绍 欢迎访问我们学校的官方网站&#xff0c;这里为您提供了全面的信息和资源&#xff0c;帮助您更好地了解我们的教育理念、教学资源和学术活动。 首页 首页是您了解我们学校的起点。这里展示了学校的最…

k8s删除状态为 Terminating 的pod

卸载calico pod时候pod资源状态会卡在terminating&#xff0c;这时候需要手动进行删除 使用以下命令即可 kubectl delete pod podName -n NAMESPACE --force --grace-period0记住一定要加命名空间&#xff0c;不然会报错没有找到

编程入门学什么:解锁编程世界的四大基石、五大技能、六大实践与七大进阶之路

编程入门学什么&#xff1a;解锁编程世界的四大基石、五大技能、六大实践与七大进阶之路 在信息爆炸的时代&#xff0c;编程已成为一项炙手可热的技能。然而&#xff0c;对于初学者来说&#xff0c;编程的门槛似乎高不可攀&#xff0c;让人望而却步。那么&#xff0c;编程入门…

《Windows API每日一练》4.5 GDI映射模式

上一节讲述设置绘图模式时&#xff0c;包括设置背景模式、混合模式&#xff0c;还有一个就是映射模式。本节我们将详细讲述映射模式。 本节必须掌握的知识点&#xff1a; 设备坐标和逻辑坐标 视口和窗口 MM_TEXT映射模式 度量映射模式 自定义映射模式 第27练&#xff1a;GDI映…

无代码爬虫软件八爪鱼采集器-如何设计判断是、否

多数情况下免费版本的功能&#xff0c;已经可以满足绝大多数采集需求&#xff0c;想了解八爪鱼采集器&#xff0c;我写了一套系列教程&#xff0c;请访问这篇帖子&#xff1a;【完结】无代码网页爬虫软件——八爪鱼采集器入门基础教程-CSDN博客 免费版八爪鱼采集器下载https:/…

【数据结构】第十七弹---C语言实现选择排序

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、选择排序 1.1、基本思想 1.2、代码实现 1.3、代码测试 1.4、时空复杂度分析 总结 1、选择排序 1.1、基本思想 选择排序是一种简单直观的比…

关键参数testab的生成过程及jsvmp算法学习

在上一篇《JS 算法学习之请求中的 testab 参数》中,我们介绍了如何学习生成关键参数testab,并使用WebSocket方式进行调用。本次将详细介绍通过浏览器开发者工具进行断点跟踪的思路以及相应的封控策略测试。 调试及分析 确定算法入口通过浏览器的开发者工具(如Chrome的F12功…

幂集(C++)

终其一生&#xff0c;你在追求什么&#xff1f; ——2024年6月16日11&#xff1a;56 题目描述 给定正整数n&#xff08;n≥1&#xff09;&#xff0c;给出求{1~n}的幂集&#xff0c;例如&#xff0c;n3时&#xff0c;{1&#xff0c;2&#xff0c;3}对应的幂集合为{{}&#xff…

FlowUs项目经理初体验

作为一名项目经理&#xff0c;FlowUs可以作为一个强大的工具来帮助我管理项目的所有方面&#xff0c;从规划到执行再到监控和回顾。 FlowUs息流是什么&#xff1f;FlowUs息流是一款集文档、多维表、文件夹等功能于一体的新一代知识管理与协作平台 以下是一些使用FlowUs作为项…

streamlit markdown里支持latex公式显示

参考&#xff1a; https://docs.streamlit.io/develop/api-reference/write-magic/st.write https://discuss.streamlit.io/t/streamlit-markdown-a-streaming-markdown-component-with-latex-mermaid-table-code-support/72187 也有独立支持的st.latex 接口单独显示公司&…

AI绘画Stable Diffusion 保姆级教程,让AI人物轻松打光的种方法,我不允许你还不会!

大家好&#xff0c;我是画画的小强 我们常常听到这样的观点&#xff1a;光影&#xff0c;如同摄影的精髓&#xff0c;为图像赋予难以抗拒的质感和情感深度。 用AI生成的图片为什么总是觉得比较“假”&#xff0c;主要还是光影不足&#xff01; 今天我将一一解析多种光影调控…

使用 final 修饰一个变量时,是引用不能变还是引用的对象不能变?

在 Java 中&#xff0c;使用 final 关键字修饰一个变量时&#xff0c;表示这个变量的引用不能改变&#xff0c;即一旦初始化之后&#xff0c;不能再指向其他对象。但是&#xff0c;这并不意味着引用所指向的对象本身是不可变的。该对象的内容仍然可以被修改。 详细解释 引用不…

RemObjects教程

File—Other…—RemObjects Data Abstract—ComboServer Step(1) 在出现的 NewRemObjects SDK Server 对话框中 Project Folder &#xff1a;文件存档路径 Project Name &#xff1a;工程名称 Also-Create a matching client application and a project group&#xff1a;在创…