模量分解如何工作?

我真的不明白模数师是如何工作的。 我计算了27 % 16 ,结果是11 ,我不明白为什么。

我似乎无法在网上找到外行的解释。 有人可以详细说明这是怎么回事?

模分割的结果是给定数字的整数除法的其余部分。

这意味着:

 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 

大多数解释都没有考虑到一个重要的步骤,让我们用另一个例子填补空白。

鉴于以下情况:

 Dividend: 16 Divisor: 6 

模数函数如下所示:

 16 % 6 = 4 

让我们来确定这是为什么。

首先,进行整数除法 (类似于正常的除法,但是丢弃任何小数(aka余数)):

 16 \ 6 = 2 

然后把上述( 2 )的结果和我们的除数6相乘

 2 * 6 = 12 

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

 16 - 12 = 4 

这个减法的结果, 4其余的 ,是我们的模数上面的结果!

也许时钟的例子可以帮助你理解模。

模块化算法的熟悉使用是在12小时的时钟中使用,其中一天分为两个12小时的时间段。

假设我们目前有这个时间: 15 : 00
但是你也可以说是下午3点

这正是模数所做的事情:

 15 / 12 = 1, remainder 3 

你可以在wikipedia上找到更好的解释这个例子: Wikipedia Modulo Article

计算模量的简单公式是:

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

所以,27%16: –

27- {(27/16)* 16}

27- {1 * 16}

答案= 11

注意

所有的计算都是整数。 在小数商数的情况下,小数后的部分被忽略/截断。

例如:27/16 = 1.6875在上面提到的公式中只取1。 0.6875被忽略。

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

模数运算符采用除法声明,并返回剩余的数据,比如13/5 = 2。这就意味着剩余3个数据,或者剩下3个数据。 为什么? 因为2 * 5 = 10。因此,13 – 10 = 3。

模数运算符为你做了所有的计算,13%5 = 3。

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

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

43/16 = 2,剩下11个,所以43%16 = 11

非常简单: a % b被定义为a除以b的余数。

有关更多示例,请参阅维基百科文章 。

我希望这些简单的步骤将有助于:

 20 % 3 = 2 
  1. 20 / 3 = 6 ; 不包括.6667 – 只要忽略它
  2. 3 * 6 = 18
  3. 20 - 18 = 2 ,这是模的其余部分

模分给你一个除法的余数,而不是商。

比方说你有17模6。

总共有6个会让你最接近17个,这将是12个,因为如果你超过12个,你将会有18个,这更多的是17个模子6的问题。然后你将从12个减去17个,这会给你你的答案,在这种情况下5。

17 mod 6 = 5

模量的划分非常简单。 它使用余数而不是商。

  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。

这意味着对于n % 12 ,设置0..100的顺序是:

 {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} 

就此而言,模量及其用途变得更加清晰。

当您的小数点后的数字(0.xxx)较短时更容易。 那么你所要做的就是把这个数字与分割后的数字相乘。

例如: 32 % 12 = 8

你做32/12=2.666666667然后你把2扔掉,重点0.666666667 0.666666667*12=8 < – 这是你的答案。

(再次,只有在小数点以后的数字很短时才容易)

很简单,Modulus运算符(%)在整数除法之后返回余数。 我们来看一下你的问题。 如何27%16 = 11? 当你简单地把27除以16(27/16),那么你得到的余数为11,这就是为什么你的答案是11。

写出一个从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或作为十进制扩展。 模运算符仅返回列,或者以另一种思维方式返回长分区的余数。 你正在处理模(5)。 不同的模数,不同的表格。 想想一个哈希表。

当我们划分两个整数时,我们将有一个等式如下:

A / B = Q余数R

A是分红; B是除数; Q是商,R是余数

有时候,我们只关心剩下的是什么,当我们将A除以B.对于这些情况,有一个称为模运算符(modulo operator)的运算符(缩写为mod)。

例子

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

请参阅可汗学院文章了解更多信息。

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

请参阅哈希表如何工作的更多信息

我想补充一点:

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

红利= 5除数= 3

5%3 = 2

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

但如果除数比分红小

红利= 3除数= 5

3%5 = 3? 怎么样

这是因为,由于5直接不能3分,所以模分红就是分红

这是理解模数运算符的最好方法。 我会通过例子向你解释。

 16 % 3 

当你把这两个数字相除时,余数就是结果。 这是我如何做到这一点。

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

所以剩下的16是1

 16 % 3 = 1 

这里还有一个例子: 16 % 7 = 7 + 7 = 14什么是16? 是2 16 % 7 = 2

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

Interesting Posts