模数除法如何工作


105

我不太了解模数除法的工作原理。我当时正在计算27 % 1611并且不知为何。

我似乎无法在网上找到通俗易懂的解释。有人可以详细说明这里发生了什么吗?

Answers:


107

模除法的结果是给定数字的整数除法的余数。

这意味着:

27 / 16 = 1, remainder 11
=> 27 mod 16 = 11

其他例子:

30 / 3 = 10, remainder 0
=> 30 mod 3 = 0

35 / 3 = 11, remainder 2
=> 35 mod 3 = 2

66
请不要采取这种错误的方式,但是您的示例并不能为绝对不知道模数除法是怎么回事的人清除任何东西。您省略了非常重要的步骤来解释其余部分的来源。Marcin M.在下面的回答更好地说明了这一过程。请考虑在将来的答案中为我们中可能根本不了解概念的人提供更详细的信息。不过,感谢您成为社区的贡献者!像您这样的人帮助我,并继续帮助我完成我的教育之旅:)
Soundfx4

尽管有维基百科,模数和余数不是一回事。有些语言有一种,另一种,两种都有,还有一些未定义。
罗恩侯爵,

156

大多数解释都错过了重要的一步,让我们用另一个例子填补这一空白。

给定以下内容:

Dividend: 16
Divisor: 6

模函数如下:

16 % 6 = 4

让我们确定为什么会这样。

首先,执行整数除法,该运算与普通除法类似,只是舍弃任何小数(也称为余数):

16 / 6 = 2

然后,上述除法(2)的结果与除数6相乘

2 * 6 = 12

最后,从我们的红利()中减去上述乘法(12)的结果:16

16 - 12 = 4

这个减法的结果,4中,其余部分,是我们的结果相同模数以上!


1
您如何从16/6中得到2,而不是2,6666666667?您是否应该始终不理会0,...?为什么?
卢克

3
@Luc正如Leo和ytpillai所提到的,我们使用整数除法(其中除后的结果小数部分将被丢弃)。在Python 3:16 // 6 >>> 216 / 6 >>> 2.6666666666666665
bryik

30

也许带有时钟的示例可以帮助您理解模数。

模块化算术的一种常见用法是在12小时制时钟中使用,其中将一天分为两个12小时制。

可以说我们目前有这个时间:15 : 00
但您也可以说现在是下午3点

这正是模的作用:

15 / 12 = 1, remainder 3

您会在Wikipedia上更好地解释此示例:Wikipedia Modulo文章


29

计算模量的简单公式是:

[Dividend-{(Dividend/Divisor)*Divisor}]

因此,27%16:-

27- {(27/16)* 16}

27- {1 * 16}

答案= 11

注意事项

所有计算均使用整数。如果是小数位商,则小数点后的部分将被忽略/截断。

例如:27/16 = 1.6875在上述公式中仅取1。0.6875被忽略。

计算机语言的编译器也以相同的方式(通过在小数点后截断)来处理带小数部分的整数


3%7呢?
eaglei22 '18

所以只有3个?
eaglei22 '18

15

模运算符采用一个除法语句,并返回该计算中剩下的任何东西,可以说是“剩余”数据,例如13/5 =2。这意味着该计算中还有3个剩余或剩余。为什么?因为2 * 5 =10。因此,13-10 = 3。

模运算符为您完成所有这些计算,即13%5 = 3。


我认为这个答案从概念上最好地说明了这一点。其他答案在数学上也解释了这也是必要的,但这可以更好地帮助我理解如何应用模运算符。
JonnyB 2015年

7

模除法就是这样:除以两个数并仅返回余数

27/16 = 1,剩余11个,因此27%16 = 11

同上43/16 = 2,剩余11个,所以43%16 = 11



5

我还要添加一件事:

当股息大于/大于除数时,很容易计算模

股息= 5除数= 3

5%3 = 2

3)5(1
  3
-----
  2

但是如果除数小于股息怎么办

股息= 3除数= 5

3%5 = 3 ?? 怎么样

这是因为,由于5不能直接除以3,所以模将是红利



2

小数点后的数字(0.xxx)短时更容易。然后,您要做的就是将该数字乘以除法后的数字。

例如: 32 % 12 = 8

32/12=2.666666667 然后你扔2了,并专注于0.666666667 0.666666667*12=8< -这就是你的答案。

(同样,只有在小数点后的数字短时才容易)



1

假设您有17个mod 6。

6的总数将使您最接近17,它将是12,因为如果您超过12,您将拥有18,这比17 mod 6的问题还要多。然后,您将得到12并从17减去负数,这将给您您的答案,在这种情况下,是5。

17 mod 6 = 5


1

模数除法非常简单。它使用余数而不是商。

    1.0833... <-- Quotient
   __
12|13
   12
    1 <-- Remainder
    1.00 <-- Remainder can be used to find decimal values
     .96
     .040
     .036
     .0040 <-- remainder of 4 starts repeating here, so the quotient is 1.083333...

13/12 = 1R1,因此13%12 = 1。


有助于将模量视为一个“周期”。

换句话说,对于表达式n % 12,结果将始终为<12。

这意味着该组序列0..100n % 12是:

{0,1,2,3,4,5,6,7,8,9,10,11,0,1,2,3,4,5,6,7,8,9,10,11,0,[...],4}

因此,模量及其用途变得更加清晰。


1

唯一要了解的是模数(此处用%表示,类似于C)是通过欧几里得除法定义的

对于任何两个(d, q)整数,始终为true

d = ( d / q ) * q + ( d % q )

如您所见,的值d%q 取决于的值 d/q。通常,对于正整数,它会d/q截断为零,例如5/2给出2,因此:

5 = (5/2)*2 + (5%2) => 5 = 2*2 + (5%2) => 5%2 = 1

但是,对于负整数,情况不太清楚,取决于语言和/或标准。例如,-5 / 2可以返回-2(像以前一样被截断为零),但也可以返回-3(使用另一种语言)。

在第一种情况下:

-5 = (-5/2)*2 + (-5%2) => -5 = -2*2 + (-5%2) => -5%2 = -1

但在第二个中:

-5 = (-5/2)*2 + (-5%2) => -5 = -3*2 + (-5%2) => -5%2 = +1

如前所述,只需记住不变式,即欧几里得除法

更多详细信息:


1
在分页方面出奇地有用。
鲍勃·乔丹

1

27%16 = 11

您可以这样解释:

16通过1次进入27。

16 * 2 = 32。

因此,您可以说16在27中进行了一次,余数为11。

事实上,

16 + 11 = 27

另一个例子:

20%3 = 2

在通过之前,3井将6乘20变为20。

3 * 6 = 18

要加到20,我们需要2,所以模数表达式的余数是2。


0

很简单,Modulus运算符(%)在整数除后返回余数。让我们以您的问题为例。27%16 = 11 当您简单地将27除以16即(27/16)时,剩下的就是11,这就是为什么答案是11的原因。


0

写出一个以0开头的表。

{0,1,2,3,4}

继续表中的行。

{0,1,2,3,4}
{5,6,7,8,9}
{10,11,12,13,14}

第一列中的所有内容均为5的倍数。第二列中的所有内容均为5的倍数,其余为1。现在是抽象部分:您可以将(1)写为1/5或十进制扩展数。模运算符仅返回列,或者换句话说,它返回长除法的余数。您正在处理modulo(5)。不同的模数,不同的表。想一想哈希表。


0

当我们将两个整数相除时,我们将得到一个如下所示的方程:

A / B = Q余数R

A是股利;B是除数;Q是商,R是余数

有时,我们只对A除以B时的余数感兴趣。在这些情况下,有一个称为模运算符(简称为mod)的运算符。

例子

16/5= 3 Remainder 1  i.e  16 Mod 5 is 1.
0/5= 0 Remainder 0 i.e 0 Mod 5 is 0.
-14/5= 3 Remainder 1 i.e. -14 Mod 5 is 1.

有关更多信息,请参见可汗学院文章

在计算机科学中,哈希表使用Mod运算符存储元素,其中A是哈希后的值,B是表的大小,R是插入元素的插槽或键的数量。

有关更多信息,请参见哈希表如何工作


-1

对于我来说,这是理解模运算符的最佳方法。我将通过示例向您解释。

16 % 3

当您将这两个数相除时,结果就是余数。这就是我的方法。

16 % 3 = 3 + 3 = 6; 6 + 3 = 9; 9 + 3 = 12; 12 + 3 = 15

所以剩下的就是16

16 % 3 = 1

这是另一个示例:16 % 7 = 7 + 7 = 1416剩下多少?是2 16 % 7 = 2

还有一个: 24 % 6 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24。所以余数为零24 % 6 = 0

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.