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

一、求余运算(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

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

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

相关文章

javax.net.ssl.SSLException MESSAGE: closing inbound before receiving peer‘s close_notify

1. 问题描述&#xff1a; ** BEGIN NESTED EXCEPTION ** javax.net.ssl.SSLException MESSAGE: closing inbound before receiving peers close_notifySTACKTRACE:javax.net.ssl.SSLException: closing inbound before receiving peers close_notifyat sun.security.ssl.Alert.…

提高虚拟机运行速度方法

原网页 要我注册才能复制... 所以我只记录了那个网址&#xff0c;我的情况是启动很慢&#xff0c;照作后有效果。 该网址&#xff1a;提高虚拟机速度

InputStream 、 InputStreamReader和BufferedReader

InputStream &#xff1a; 是所有字节输入流的超类&#xff0c;一般使用它的子类&#xff1a;FileInputStream等&#xff0c;它能输出字节流&#xff1b;InputStreamReader &#xff1a; 是字节流与字符流之间的桥梁&#xff0c;能将字节流输出为字符流&#xff0c;并且能为字节…

多线程原理分析面试题理解

系列前言 本系列是本人参加微软亚洲研究院&#xff0c;腾讯研究院&#xff0c;迅雷面试时整理的&#xff0c;另外也加入一些其它IT公司如百度&#xff0c;阿里巴巴的笔试面试题目&#xff0c;因此具有很强的针对性。系列中不但会详细讲解多线程同步互斥的各种“招式”&#xff…

Could not load driverClass “com.mysql.jdbc.Driver“

1. 问题描述 Could not load driverClass “com.mysql.jdbc.Driver” 2. 解决办法 检查是否成功导入了mysql的jdbc的jar包 导入后成功解决 参考文献&#xff1a; https://blog.csdn.net/weixin_43433032/article/details/98494228 感谢作者分享&#xff01;

luogu2034

/** 正难则反* f[i] 表示前 i 个数中被删除的数的最小和* f[i] min(f[j]) num, i - k 1 < j < i;* 单调队列维护 */ #include <bits/stdc.h>#define LL long longconst int N 1e5 10;LL tot, d, n, k; LL p[N], head 1, tail 1; LL q[N], f[N], ans;int mai…

Django的models操作

一、先看单表操作 增 方式1&#xff1a; models.book.objects.create(Book_name "aaa",Book_info "bbb",Book_price "ccc",Book_num "ddd")方式2&#xff1a;用2个*号传递一个字典进去  book_info {"Book_name":"…

ngingx安装错误 ./configure: error: the HTTP rewrite module requires the PCRE library.

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. ngnix 安装报错&#xff1a; 2. 解决&#xff1a; 安装pcre-devel解决问题&#xff0c;运行命令 yum -y install pcre-devel 3.…

32--数组中重复的数字

1. 问题描述 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0&#xff5e;n-1 的范围内。数组中某些数字是重复的&#xff0c;但不知道有几个数字重复了&#xff0c;也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1&#xff1…

实习期间的一些思考整理(3)2018.4.12~4.13

青云诀游戏体验日报-2018.4.12 今日关键点&#xff1a;核心玩法 青云诀的核心玩法是“战斗”、“成长”、“探索”&#xff08;这三点也是RPG类型的要素&#xff09;&#xff0c;侧重于成长。 我是这样想的&#xff0c;要想找出核心玩法是什么&#xff0c;就要看哪些玩法没了&a…

整理的最全 python常见面试题(基本必考)

访问flyai.club&#xff0c;一键创建你的人工智能项目作者&#xff1a;大蛇王https://blog.csdn.net/t8116189520/article/details/801655891、大数据的文件读取① 利用生成器generator②迭代器进行迭代遍历&#xff1a;for line in file2、迭代器和生成器的区别1)迭代器是一个…

Nginx安装手册(摘自入云龙老师教案,亲测可用)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Nginx安装手册 一、 nginx安装环境 nginx是C语言开发&#xff0c;建议在linux上运行&#xff0c;本教程使用Centos6.5作为安装环境。 …

33--二维数组中的查找

1.问题描述 在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下&…

XML Schema是什么

XML Schema 本身也是一种XML构造&#xff0c;它用来描述[哪个元素&#xff0c;在什么时候出现]&#xff0c;[该元素具有什么样的属性]等等&#xff0c;也就是说&#xff0c;XML Schema是对XML的树形构造加以描述说明的一种语言。原本&#xff0c;使用DTD对XML的树形构造加以描述…

js之base64上传图片

首先要搭建好springmvc&#xff0c;详见https://www.cnblogs.com/zzb-yp/p/9295397.html 整体思路&#xff1a;前端代码包括显示和传参&#xff08;这里的参数主要就是图片的base64字符串&#xff09;&#xff0c;显示主体部分是type“file”类型的input组件和一个提交按钮 …

一些常用软件的网络端口协议分类介绍

最近有朋友请教我有关实现校园局域网视频功能软件的编写问题&#xff0c;涉及到端口有关的知识&#xff0c;自己查了一些资料&#xff0c;发现这篇文章总结得比较不错&#xff0c;常用软件涵盖得比较丰富&#xff0c;很实用&#xff0c;需要用到的时候可以查阅。于是决定将这篇…

WPF 使用皮肤影响按钮自定义

在WPF项目中使用了 Theme的皮肤后&#xff0c;发现自定义的按钮全部都是 皮肤里面的样式&#xff0c;如下图&#xff1a; 要自定义样式&#xff0c;只有不给按钮使用皮肤样式。 如果想给某一个控件使用样式&#xff0c;在前端Xaml的控件中&#xff0c;设置一下属性即可&#xf…

各种数据库对应的jar包、驱动类名和URL格式

见&#xff1a;http://blog.csdn.net/xuguiyi100/article/details/7970379 maven/Java/web/bootstrapQQ群&#xff1a;566862629。希望更多人一起帮助我学习。 1.1. 各种数据库对应的jar包 具体如下&#xff1a; 数据库类型 对应的Jar文件 Oracle 8i classes12.zip 或…

34--替换空格

1.问题描述 请实现一个函数&#xff0c;把字符串 s 中的每个空格替换成"%20"。 示例 1&#xff1a; 输入&#xff1a;s “We are happy.” 输出&#xff1a;“We%20are%20happy.” 2.解题思路 由于每次替换从 1 个字符变成 3 个字符&#xff0c;使用字符数组可方…