一、求余运算(Remainder)

http://zh.wikipedia.org/wiki/同余)

Euclidean division:Given two integers a and b, with b ≠ 0, there exist unique integers q and r such that a = bq + r and 0 ≤ r < |b|, where |b| denotes the absolute value of b.

(术语:  a 被除数 dividend ; b 除数 divisor;q 商 quotient;r 余数 remainder)

按照上面的定义:余数唯一并始终大于或等于0,并可以拓展到两个整数为正数或负数的情况。

但是,程序设计语言求余

我们引出另一种余数定义:a = bq + r and 0 <= |r| < |b| 。于是,我们可以发现这种情况下余数可能不止一个。

例子:a = 43 b = 5时:

43 = 5 * 8 + 3 : q = 8;r = 3 (r > 0)

43 = 5 * 9 -  2 : q = 9;r = -2 (r < 0)

当a 和 b 含有负数时也存在这两种余数。

例子:a = 43 b = -5时:

43 = -5 * -8 + 3 : q = -8;r = 3 (r > 0)

43 = -5 * -9 -  2 : q = -9;r = -2 (r < 0)

大多数程序设计语言要求余数与被除数的正负号相同(参考自《C陷阱与缺陷》,强调了程序的可移植性问题,即被除数或除数含有负数时要谨慎对待)。这说明不同程序设计语言实现时对上述例子求余时可能是上面不同的解。

二、取模运算 (Modulo)

In computing, the modulo operation finds the remainder after division of one number by another (sometimes called modulus).

上面这句话说明,取模运算和求余运算的目标都是一致的。只是不同程序设计语言时实现的方式可能不同,也就是上面所说的采用另一种余数定义时,含有两种余数结果。一些语言可能会采取第一个结果;另一些语言可能会采取第二个结果;还有些语言可能会把取模和求余分开定义,分别采取两种结果。维基百科里面就列出了一些程序设计语言采取的操作,常见的为以下几种:

1.求余结果或取模结果的正负号与被除数相同;

2.求余结果或取模结果的正负号与除数相同;

3.求余结果或取模结果的总是正数;

4.求余结果或取模结果由实现定义;

5.求余结果或取模结果为最接近0的数;

求余运算和取模运算小结:有人会把取模运算和求余运算分开解释,又采用特定的语言去举例,我认为这两种运算目标都是一致,只是求余运算倾向于数学,而取模运算倾向于计算机科学,之所以不同语言会有不同的结果,本质是因为根据求余运算定义导致余数不唯一时不同程序设计语言采用了不同的结果,但他们都会根据某种依据来给出唯一的结果。这也告诉我们,程序移植时必须当心这种差别,特别是当两个整数含有负数的情况。

三、取模运算性质

术语:

For a positive integer n, two integers a and b are said to be congruent modulo n, and written as

一些有用的性质(可证明):

如果a≡b(mod m),x≡y(mod m),则a+x≡b+y(mod m)。

如果a≡b(mod m),x≡y(mod m),则ax≡by(mod m)。

如果ac≡bc(mod m),且c和m互质,则a≡b(mod m) (就是说同余式两边可以同时除以一个和模数互质的数)。

取模运算性质_数学与编程——求余、取模运算及其性质 | 学步园相关推荐

  1. 【转】数学与编程——求余、取模运算及其性质

    一.求余运算(Remainder) (参考维基百科: http://zh.wikipedia.org/wiki/余数  http://en.wikipedia.org/wiki/Remainder h ...

  2. php取模,PHP的求余(取模)运算

    这篇文章主要介绍了关于PHP的求余(取模)运算 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 先来看下个小案例:$n = 8.45; $result = $n*100; echo g ...

  3. php 求余 负数,PHP的求余(取模)运算

    这篇文章主要介绍了关于PHP的求余(取模)运算 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 先来看下个小案例:$n = 8.45; $result = $n*100; echo g ...

  4. 数学连乘和累加运算符号_数学符号归纳

    1.几何符号 ⊥ ∥ ∠ ⌒ ⊙ ≡ ≌ △ 2.代数符号 ∝ ∧ ∨ - ∫ ≠ ≤ ≥ ≈ ∞ ∶ 3.运算符号 如加号(+),减号(-),乘号(×或·),除号(÷或/),两个集合的并集(∪),交 ...

  5. python爬取大众点评数据_利用Node.js制作爬取大众点评的爬虫

    前言 Node.js天生支持并发,但是对于习惯了顺序编程的人,一开始会对Node.js不适应,比如,变量作用域是函数块式的(与C.Java不一样):for循环体({})内引用i的值实际上是循环结束之后 ...

  6. python可以爬取wind数据库吗_如何利用Python来爬取近百万条数据?数据库会炸吧?...

    2.页面分析 发现一共有88万多个问题,再看一下页面的列表规律,我们按照每页最大显示50个问题,一共有17776页,数据非常大 1).页面列表的构建 整个的stackoverflow上关于Python ...

  7. python爬取斗鱼鱼吧_[Python爬虫]使用Python爬取静态网页-斗鱼直播

    作者:宅必备 Python爱好者社区--专栏作者 一个会写Python的Oracle DBA 个人公众号:宅必备 公众号:Python爱好者社区 作者其他文章: 好久没更新Python相关的内容了,这 ...

  8. python求余、除法运算、向下圆整、round圆整

    >>>1 % 2 1 这是求余运算符. x % y的结果是x除以y的余数.    x - ((x // y) *  y) 对于整除运算,结果都是向下圆整. >>>1 ...

  9. 十分钟理解线性代数的本质_数学对于编程来说到底有多重要?来看看编程大佬眼里的线性代数!...

    本文提出了一种观点:从应用的角度,我们可以把线性代数视为一门特定领域的程序语言.我们一起来看看!文章有点偏理论讨论,可能比较枯燥,对于一名程序员,你如果看下去,你将会有不一样的收获! 线性代数是什么? ...

最新文章

  1. js实现语音播报功能
  2. C++容器的选择和详细操作方法总结(有自己总结)
  3. spring转发和重定向
  4. C语言中.和->区别
  5. php7.4报错:Trying to access array offset on value of type null
  6. python批量创建txt文件
  7. mysql全称量词_数据库整理(三) SQL基础
  8. Python网络流量监视程序设计与实现
  9. Springboot+RSA非对称加密
  10. FAT文件系统原理(一)
  11. canvas绘制图像轮廓效果
  12. loadrunne-- Analysis 分析器
  13. 华为设备配置SSH远程登录
  14. lcg_magic算法笔记:堆排序
  15. 2021年有哪些能用的活体人物虚拟主播
  16. 联合培养博士经历对于国内就业有优势吗?
  17. 计算机软硬件故障排除知识,计算机软硬件基础知识及常见故障排除方法(精选).doc...
  18. 网络入侵检测系统之Suricata(三)--日志代码详解
  19. iMacros Chrome 插件
  20. 鸿蒙开发 拍照功能,详细解析(Js篇)

热门文章

  1. 人生观、价值观、世界观
  2. 成功职业指导:我适合往管理方向发展吗?
  3. OSPF中的SPF计算
  4. 气象数据下载网站(存档)
  5. 《操作系统真象还原》第七章
  6. 【noip2005】采药
  7. SQL语句的优化(常规SQL语句的优化)
  8. 怎么在linux系统查看jdk版本,linux系统如何查看jdk版本
  9. C-DOCSIS上行信道
  10. Linux进程同步之POSIX信号量