一、求余运算(Remainder)

(参考维基百科: http://zh.wikipedia.org/wiki/余数  http://en.wikipedia.org/wiki/Remainder http://en.wikipedia.org/wiki/Euclidean_divisionhttp://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)

(参考维基百科:http://en.wikipedia.org/wiki/Modulo_operation  http://en.wikipedia.org/wiki/Modular_arithmetic)

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) (就是说同余式两边可以同时除以一个和模数互质的数)。

【来源】

转载于:https://www.cnblogs.com/skullboyer/p/9437670.html

【转】数学与编程——求余、取模运算及其性质相关推荐

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

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

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

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

  3. 深度理解取余/取模运算

    日常编程经常会接触到取余/取模运算,那么计算机中取余/取模运算究竟是怎么定义的? P1:四种"取整"方式 数学取整 1.1 向0取整 parseInt() 注意接受参数是strin ...

  4. C语言符号-取余\取模运算

    目录 前言 取整 向0取整 向-∞取整 向+∞取整 四舍五入取整 汇总 取模\余 对于正数取模 对于负数取模 取余和取模的理解 前言 本文主要讲解并真正理解取余\取模运算是怎样的! 取整 首先取整有四 ...

  5. 取模运算性质_数学与编程——求余、取模运算及其性质 | 学步园

    一.求余运算(Remainder) http://zh.wikipedia.org/wiki/同余) Euclidean division:Given two integers a and b, wi ...

  6. 取模运算性质_取模运算的性质

    对于整型数a,b来说,取模运算或者求余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余数: r = a - c*b. 求模运算和求余运算在第一步不同: 取余运算在取c的值时,向0 ...

  7. 关于取模运算(mod)和求余(rem)运算

    通常情况下取模运算(mod)和求余(rem)运算被混为一谈,因为在大多数的编程语言里,都用'%'符号表示取模或者求余运算.在这里要提醒大家要十分注意当前环境下'%'运算符的具体意义,因为在有负数存在的 ...

  8. java中的取模和取余_取模运算

    本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 取模运算是求两个数相除的余数.[1] 取模运算("Modulus Operation")和取余运算(&qu ...

  9. c语言里取余数的运算的代码,Math——取模运算及取余运算(示例代码)

    取模运算及取余运算 取余运算(Complementation)即我们小学时学的数学算术概念,而取模运算(Modulus Operation)常用于程序设计中 公式 a%b = a - (a/b * b ...

最新文章

  1. 波士顿咨询:2018最具创新力企业50强
  2. PLSQL 使用技巧汇总贴(一个坑)
  3. 关于python中程序流程结构-Python语言程序设计(第4章:程序结构设计)
  4. linux的线程实验的实验结果,Linux线程qps测试
  5. 祝贺王远当选为中国区第二位 Teams MVP
  6. Form.php 日期表单,Bootstrap日期和时间表单组件使用方法
  7. 菜鸟学习笔记:Java提升篇5(IO流1——IO流的概念、字节流、字符流、缓冲流、转换流)
  8. Nhibernate(1)续
  9. Layui 的内置jquery 版本
  10. ts无损剪辑合并_视频如何合并?视频合并太难?其实很简单
  11. PDF英文文档免费翻译成中文
  12. 【北交所周报】新三板企业巍特环境北交所IPO闯关失败;历经5个月审核,腾信软创宣布撤回北交所上市申请;...
  13. 【java毕业设计】基于java+swing+Eclipse的俄罗斯方块游戏GUI设计与实现(毕业论文+程序源码)——俄罗斯方块游戏
  14. ActiveMQ消费者断开重连
  15. wmf文件与emf文件
  16. AS问题解决 Not recognizing known sRGB profile
  17. 【正达信通】设备资产管理系统(ZS-iEAM),全生命周期资产管理全面击破设备管理难题
  18. Win10添加简体中文美式键盘的方法
  19. DNS劫持原理与操作
  20. Java之BigInteger的用法

热门文章

  1. webgl限制帧率_从《长安十二时辰》到《Science Advances》:大帧数高帧率超表面动态全息显示新方法...
  2. 【LeetCode - 131】分割回文串(dp,dfs)
  3. 【Python学习】 - 超详细的零基础Pandas学习(附Python数据分析与应用课本第四章实训答案)
  4. java整型缓存_JAVA整型包装类的缓存策略
  5. 基于IO流读取的 完成 用户登录,注册,修改,查看所有用户,删除功能
  6. 计算两个日期间隔天数(距离(2024-7-7)间隔:1999天)
  7. python os模块方法_python os模块方法总结
  8. MySQL命令(二)| 表的增删查改、聚合函数(复合函数)、联合查询
  9. 管道实现父子进程的信息传递(一)【fork函数、pipe函数、write/read操作、wait函数】
  10. Linux实验三:Shell编程