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

76

我正在使用Python进行取模运算,我知道它会返回余数。

但如果第一个数字比第二个小怎么办?

例如

2 % 5 的答案是 2。

这是如何运作的呢?

2/5 = .4


你断言"2/5=.4",但是这是错误的。尝试在REPL中输入"2/5"。 - Chris Martin
8
12 % 5 = 2 的原因是 5 x 2 = 10,而 12 - 10 = 2 - spencer.sm
23
2 % 5 = 2 的原因是 5 x 0 = 0, 而 2 - 0 = 2. - spencer.sm
4
@spencer.sm的解释很好,你应该将其制作成答案。 - MadHatter
@ChrisMartin 只适用于2.x版本。(在您发表评论时,Python 3.3正在积极开发中。) - Karl Knechtel
19个回答

2

当a << b时,a % b = a。


1
我想你的意思是如果 0 < a < b ... 如果 a 是负数,那就麻烦了。 - Matthew Scharley
好的,我应该更加准确。 - user180100

2

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

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

2
作为对于我们这些非数学大脑的人的跟进,我认为理解这个问题的部分问题在于,该概念通常被简化为“当你用y除以x时剩下什么”,当x较小时是没有剩余的,即0。一个更加可靠的方法可能是:
  1. y可以完全被x整除几次?
  2. 把那个数字乘以y,尽可能接近x
  3. 现在从步骤2中得到的结果中减去你得到的x,这就是你的模数。
所以在2(作为x)%5(作为y)中:
  1. 5不能整除2,因此为0
  2. 0(上一步的结果)乘以5(即y)为0
  3. 2(即x)- 0(上一步的乘积)为2

1

没有一个数可以乘以5使你更接近2

换句话说,x必须为0才能满足方程:5*x + r = 2


1
MOD不适用于小数... MOD(A,B)可以得到A除以B的余数。

1
你能否稍微详细地解释一下,或者将其作为注释添加进去呢?有些人可能会难以理解您的思路。谢谢! - Fabian Schultz

1
要理解模运算,建议您前往Khan Academy阅读他们的文章。同时,他们在同一页上提供了交互式练习题。链接如下: 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。


希望这可以帮到你。正如我所说,你可以在Khan Academy上了解更多信息。这是链接: https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/what-is-modular-arithmetic


1
在程序中,当2%5 = 2时: 在实际的数学中,余数为0,商为0.4。 但在编程中,它认为2小于5,意味着5*1=5,所以它向下取整并将其除以0,因此变得更小,即为0。因此余数变为2,因为2-0=2 ;)

0

例子:a % n

  1. -5 % 7 = 2 ---> 7 - 5 = 2
  2. 4 % -9 = -5 ---> 9 - 4 = -5(遵循较大数的符号)

[^ 实际上,这部分取决于编程语言本身,对于第一个例子可以是2或-5(忽略负号),或者对于第二个例子可以是-5或4]

@aldennis


-1

模数运算通过给出除法后的余数来工作,它有一个有用的应用是
-判断一个数字是否为偶数
代码示例:

// 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,它就是偶数,否则它就是奇数。


这是 Modulo 的“JavaScript”版本。 - Helios
这如何回答实际问题,即当第一个操作数小于第二个操作数时会发生什么? - Adrian Mole

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接