Understanding The Modulus Operator %
我通过以下表达式理解Modulus运算符:
1 | 7 % 5 |
这将返回2,这是因为5一次进入7,然后给出剩下的2,但是当您将以下语句反转为以下内容时,我会感到困惑:
1 | 5 % 7 |
这给了我5的值,这使我有些困惑。 尽管7的总数没有变成5,所以为什么没有7的余数或正数或负数的余数呢?
如果它基于7完全不等于5的事实来计算5的值,那么为什么余数不是7而不是5?
我对模运算符的理解似乎缺少一些东西。
(此说明仅适用于正数,因为它取决于语言。)
定义
模量是欧几里德除以一个数与另一个的余数。
例如,
在您的示例中:5除以7得到0,但仍为5(
计算方式
模运算可以使用以下公式计算:
1 | a % b = a - floor(a / b) * b |
-
floor(a / b) 表示可以将a 除以b 的次数 -
floor(a / b) * b 是完全成功共享的金额 -
总(
a )减去共享的部分等于除法的其余部分
应用于最后一个示例,得出:
1 | 5 % 7 = 5 - floor(5 / 7) * 7 = 5 |
模块化算术
就是说,您的直觉是它可以是-2而不是5。实际上,在模块化算术中,
您可能没有学过模块化算术,但是您可能已经使用过角度,并且知道-90°与270°相同,因为它是360模。它很相似,可以自动包装!因此,绕一个圆圈,说它的周长是7。然后您读到哪里是5。如果尝试使用10,则它应该是3,因为
两步解决方案。
对于我来说,这里的一些答案很复杂。我将尝试再添加一个答案,以简化查看方式。
简短答案:
Each person should get one.
Each person should get one.
程序化答案:
这个过程基本上是问两个问题:
范例A:(7%5)
(Q.1)乘以5得到7的数字是多少?
1 | Two Conditions: Multiplier starts from `0`. Output result should not exceed `7`. |
咱们试试吧:
尽管如此,我们还是很矮,所以我们加一(+1)。
我们还没有得到7,所以我们加一(+1)。
现在我们超过了
(问题2)要获得
我们减去两个数字:
因此,
范例B:(5%7)
1-我们要乘以7以获得5的数字是多少?
1 | Two Conditions: Multiplier starts from `0`. Output result and should not exceed `5`. |
咱们试试吧:
我们还没有得到5,让我们尝试更大的数字。
哦,不,我们超出了
2-为了达到左侧
显然数字是5。
1 | 5 % 7 = 5 |
希望能有所帮助。
正如其他人指出的那样,模量基于剩余系统。
我认为考虑模数的更简单方法是将除数(要除的数)除以除数后剩下的数。因此,如果我们考虑5%7,当您将5除以7时,7只能变成0到5,而当您从5中减去0(7 * 0)时(就像我们在小学学习的一样),那么其余的将是5(国防部)。请参见下图。
1 2 3 4 5 | 0 ______ 7) 5 __-0____ 5 |
使用相同的逻辑,-5 mod 7将为-5(-5中只能输入0 7,而-5-0 * 7 = -5)。具有相同标记的-5 mod -7也将为-5。
还有一些有趣的情况:
5 mod(-3)= 2,即5-(-3 * -1)
(-5)mod(-3)= -2,即-5-(-3 * 1)= -5 + 3
模数为余数系统。
所以7%5 = 2。
5%7 = 5
3%7 = 3
2%7 = 2
1%7 = 1
在函数内部使用以确定数组索引时。编程安全吗?那是一个不同的问题。我猜。
剩下的就差不多了。让我告诉你怎么做
1 2 3 4 5 6 7 | 10 % 5=0 9 % 5=4 (because the remainder of 9 when divided by 5 is 4) 8 % 5=3 7 % 5=2 6 % 5=1 5 % 5=0 (because it is fully divisible by 5) |
现在我们应该记住一件事,mod意味着余数,所以
1 | 4 % 5=4 |
但是为什么是4?
因为5 X 0 = 0
所以0是小于4的最接近倍数
因此4-0 = 4
步骤1:5/7 = 0.71
第2步:取小数点的左侧,因此我们从0.71取0并乘以7
0 * 7 = 0;
步骤#:5-0 = 5;因此,5%7 = 5
下面给出了一种发现余数的新颖方法
声明:余数始终不变
1 | ex : 26 divided by 7 gives R : 5 |
通过找到完全除以26的数字,可以很容易地发现这一点。
除数并取两者之差
1 2 3 4 5 6 7 8 | 13 is the next number after 7 that completely divides 26 because after 7 comes 8, 9 , 10, 11, 12 where none of them divides 26 completely and give remainder 0. So 13 is the closest number to 7 which divides to give Remainder 0. now take the difference (13 ~ 7) = 5 which is the Remainder . note : for this to work divisor should be reduced to its simplest form ex: if 14 is the divisor ..7 has to be chosen to find the closest number dividing the dividend. |
可汗学院有一个很好的描述:
https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/what-is-modular-arithmetic
让我们这样写:
实际上,Modulus运算符会进行相同的除法运算,但它并不关心答案,例如,如果您将7除以5,它会注意提示。
因此,让我为您介绍一个简单的示例:
认为5是一个块,那么例如我们将在15中有3个块(WITH Nothing Left),但是当loginc进入这种类型时,数字{1,3,5,7,9,11,...},这就是Modulus出现的地方,因此请采用我之前说的逻辑并将其应用于7,这样的答案将是我们手中有1块5等于7 =>且有2个提示!那就是模量!!!
但是您要问的是5%7,对吗?
所以按照我说的逻辑,我们在5中有多少个7块? 0
所以模数返回0 ...
而已 ...
模量运算符为您提供"减少残留物系统"的结果。例如对于mod 5,有5个整数计数:0、1、2、3、4。实际上19 = 12 = 5 = -2 = -9(mod 7)。答案是由编程语言通过"减少残留物系统"给出的主要区别。