当第一个数字较小时,模运算如何工作?

Posted

技术标签:

【中文标题】当第一个数字较小时,模运算如何工作?【英文标题】:How does a modulo operation work when the first number is smaller? 【发布时间】:2010-12-04 20:57:33 【问题描述】:

我正在搞乱 python 中的模运算,我知道它会吐出余数。

但是如果第一个数字小于第二个呢?

例如

2 % 5 答案是 2。

它是如何工作的?

2/5 = .4

【问题讨论】:

您已经断言“2/5 = .4”,但这是错误的。尝试在 REPL 中输入“2/5”。 12 % 5 = 2 因为5 x 2 = 1012 - 10 = 2 2 % 5 = 2 因为5 x 0 = 02 - 0 = 2 @spencer.sm 很好的解释——你应该把它变成一个答案。 【参考方案1】:

5 进入 2 零次。

5*0 = 0

2-0 = 2.

答案是 2。

【讨论】:

【参考方案2】:

您可以将其视为 2 / 5 = 0,余数为 2 of 5。

【讨论】:

【参考方案3】:

a % b = a 如果 a

【讨论】:

我认为你的意思是如果0 < a < b ...如果a 是负数,那么你就有麻烦了。 不错的收获,我应该更准确。【参考方案4】:

2 除以 5(整数除法)为 0,余数为 2。

【讨论】:

【参考方案5】:

这有帮助吗

22  % 5 = 2 
17  % 5 = 2 
12  % 5 = 2 
7   % 5 = 2 
2   % 5 = 2

也许是这样

22 / 5 = 4 + 2/5
17 / 5 = 3 + 2/5
12 / 5 = 2 + 2/5
7  / 5 = 1 + 2/5
2  / 5 = 0 + 2/5

【讨论】:

【参考方案6】:

2 = 0 x 5 + 2

【讨论】:

【参考方案7】:

例如 2 % 5 答案是 2。它是如何工作的? 2/5 = .4!

模本身会产生整数结果,而除法可以是整数或浮点运算。您观察到 2/5 等于 0.4 表明您正在考虑浮点数。在这种情况下,.4 本身 是余数,表达方式不同。 “0.4”的整数部分是“0”,余数部分是“.4”。整数除法运算的余数与浮点运算的小数部分(或通俗的“小数”部分)完全相同,只是表达方式不同。

您示例的小数部分 0.4 可以表示为 0.4 或 2/5(五分之二);无论哪种方式都是一样的。注意写成 2/5 时,小数部分的分母(除数)与原题的分母(除数)相同,而小数部分的分子(除数)就是所谓的整数除法中的“余数”。不管你怎么看,商的小数部分余数代表的是同一个东西( 不能被除数均分的被除数部分),只是表达方式不同。

【讨论】:

不,.4 是 商, 并且有 no 余数,在实际除法中。其余的也没有意义,因为它暗示正确的模值是 0.4 舍入或截断为零。 @EJP - 很抱歉我的回答对你没有意义。在“实数”除法中,除以除数得到商。商可以用不同的方式表示:它可以表示为单个量(有多种形式),也可以表示为一个整数,表示被除数可以被除数除以的整数倍,如果有任何数量“剩余"不能被除数整除的,就是"余数"。余数正好是落在“小数点”右边的那部分商,只是表达方式不同。 第一条评论中的用户因为不理解而对此提出异议是错误的。这非常有意义,并且很好地解释了运算符背后的数学原理。将“余数”作为表达除法结果小数部分的不同方式对我很有帮助!【参考方案8】:

当第一个数字较小时,计算模数的结果真的非常容易。结果总是等于第一个(较小的)数字

3 % 5 = 3
5 % 10 = 5
78 % 112 = 78

自己试试吧。

【讨论】:

【参考方案9】:

余数中的分子是你的模答案,无论如何,分子比分母大还是小。

12 % 5 = 2 , because 12 / 5 = 2 and **2**/5

9 % 2 = 1 , because 9 / 2 = 4 and **1**/2

这可能更有意义。

5 % 89 = 5 , because 5 / 89 = 0 and **5**/89

5 % 365 = 5 , because 5 / 365 = 0 and **5**/365

5 % 6 = 5 , because 5 / 6 = 0 and **5**/6

【讨论】:

【参考方案10】:
a%b = a/b=c,
      c*b=d,
      a-d=modulo;

这就是我认为 python 在修改两个数字时所做的事情。较小的数字和较大的数字之间的模数总是较小的数字。

【讨论】:

这是一个新答案吗?与其他信息相比,新信息是什么? 评论不阅读评论。然后阅读它们,但无法删除我的评论。我想我很抱歉。【参考方案11】:

MOD 不适用于十进制... MOD(A,B) 你想要 A 的结果

【讨论】:

您能否对此进行一些扩展或将其添加为评论?有些人可能很难在这里跟随你的想法。谢谢!【参考方案12】:

没有任何数字可以乘以 5 让您更接近 2

换句话说,x 必须是 0 才能满足等式:5*x + r = 2

【讨论】:

【参考方案13】:

另外需要注意的是,如果第一个数 (a) 是负数,则答案始终是第二个数与第一个数 (n-a) 的差。

示例:a % n

    -5 % 7 = 2 ---> 7 - 5 = 2 4 % -9 = -5 ---> 9 - 4 = -5(按照较大数的符号)

如果两个数字都是负数,则答案将始终是负数,等于较小的数字。

    -5 % -7 = -5 -4 % -9 = -4

【讨论】:

【参考方案14】:

要了解模算术,我建议你去可汗学院阅读他们的帖子。他们还在同一页面上有互动练习题。这是链接:https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/what-is-modular-arithmetic

简而言之:

使用以下等式:

A = BQ + R

A红利

B除数

Q

R余数,是取模的结果。

Q = (A/B)

请记住,Q 总是使用最接近的最小整数。所以如果 Q = 0.2,那么 Q = 0.0。如果 Q = -1.2,则 Q = -2.0。

如果 Q 没有小数,那么你的最终答案是 0 (R = 0)。


关于您的问题:

Q = (2/5) = 0.4,所以 Q = 0。

将其插入“A = BQ + R”:

2 = 5*0 + R

所以,R = 2。


希望这会有所帮助。正如我所说,您可以阅读更多关于可汗学院的信息。这是链接:https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/what-is-modular-arithmetic

【讨论】:

【参考方案15】:

如果第一个数字更小,那么答案就是第一个数字。

因为第二个数字更大,它“进入”第一个数字零次,余数是第一个数字的全部。

edit:重新访问这个线程,我必须记住这个运算符的用途。我在这里提到了另一个线程:

Recognizing when to use the modulus operator

【讨论】:

【参考方案16】:

如果 2%5 = 2: 在实际数学中,余数为 0,商为 0.4 但是在编程中,它看到 2 小于 5 意味着 5*1=5,所以它变低并除以 0,所以它变得更小,即 0。因此余数变为 2,因为 2-0=2 ;)

【讨论】:

【参考方案17】:

作为对我们这些非数学头脑的人的跟进,我认为理解这一点的部分问题在于,这个概念通常被简化为“当你将 x 除以 y 时剩下的东西”,其中,当 x 较小时,什么都不是,也就是 0。我可能会说更失败的方法

    y 完全进入 x 多少次? 取该数字,乘以 y 以尽可能接近 x 现在用 x 减去第 2 步得到的值,这就是模数。

所以在 2 (as x) % 5 (as y):

    5 完全没有进入 2,所以,0 0(上述步骤的结果)乘以 5(又名 y)为 0 2(aka x) - 0(上一步的乘积)是 2

【讨论】:

【参考方案18】:

Modulo 通过给出除法后的余数来工作,它有用的一件事是 - 查找一个数字是否是偶数 代码示例:

// 4 % 2 means "2 divided by 2 is what, and what is the remainder? if I have a remainder, return it or else return 0"
if(4 % 2 == 0) 
  alert("2 is even");
 else 
  alert("2 is odd");

因此,如果 4 % 2 的余数为 0,则为偶数,否则为奇数。

【讨论】:

这是一个“javascript”版本的 Modulo。 这如何解决当第一个操作数小于第二个操作数时会发生什么的实际问题?

以上是关于当第一个数字较小时,模运算如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

表示年月的正则表达式

如何计算没有“%”运算符的两个数字的余数/模?

Java逻辑运算符

JS:关于逻辑运算

识别何时使用模运算符

运算符