我理解取模运算符的含义,可以用以下表达式表示:
7 % 5
由于5除7余2,因此这将返回2,但当您将此语句反转为以下内容时,我感到困惑:
5 % 7
这给了我值为5,让我有点困惑。虽然整个7不能被5整除,但部分可以,那么为什么没有余数或正负2的余数?
如果它是基于7根本无法整除5来计算5的值,那么余数为什么不是7而是5呢?
我觉得我在理解模运算方面漏掉了什么。
我理解取模运算符的含义,可以用以下表达式表示:
7 % 5
由于5除7余2,因此这将返回2,但当您将此语句反转为以下内容时,我感到困惑:
5 % 7
这给了我值为5,让我有点困惑。虽然整个7不能被5整除,但部分可以,那么为什么没有余数或正负2的余数?
如果它是基于7根本无法整除5来计算5的值,那么余数为什么不是7而是5呢?
我觉得我在理解模运算方面漏掉了什么。
(这个解释仅适用于正数,因为它取决于语言)
定义
模数是一个数除以另一个数的欧几里得余数。 %
称为模运算。
例如,9
除以 4
等于 2
余 1
。 这里,9 / 4 = 2
且 9 % 4 = 1
。
在您的示例中:5 除以 7 等于 0 但余数为 5 (5 % 7 == 5
)。
计算
可以使用以下公式来计算模操作:
a % b = a - floor(a / b) * b
floor(a / b)
表示你可以将 a
除以 b
多少次floor(a / b) * b
是成功分享的数量a
) 减去已分享的部分等于除法的余数应用于最后一个例子,得到:
5 % 7 = 5 - floor(5 / 7) * 7 = 5
模运算
尽管你的直觉认为它可能是-2而不是5。实际上,在模运算中,-2 = 5 (mod 7)
因为存在一个k在Z中使得7k - 2 = 5
。
也许你没有学过模运算,但你可能使用过角度并知道-90°与270°相同,因为它对360取模。它类似于“环绕”!所以拿一个圆圈,说它的周长是7。然后你看一下5在哪里。如果你试着用10,那么应该是3,因为10 % 7
是3。
这里的一些答案对我来说太复杂了。我会尝试添加一个答案,试图简化如何看待这个问题的方式。
示例1:
7 % 5 = 2
每个人应该得到一片比萨饼。
将7份比萨切成5份,每个人就可以分到一片比萨,我们最后剩下2
片比萨。因为7
比5
大,所以7%5
等于2
.
示例2:
5 % 7 = 5
每个人应该得到一片比萨饼。
结果为5
是因为5
比7
小。因此根据定义,你无法将整个5
份物品分给7
个人。因此根本没有进行划分,你最终得到的数量与开始的数量相同,即5
。
这个过程基本上可以用两个问题来解决:
示例A: (7 % 5)
(Q.1) 乘以5得到7的数字是多少?
Two Conditions: Multiplier starts from `0`. Output result should not exceed `7`.
让我们试一试:
乘数为零0
,所以0 x 5 = 0
然而,我们还不够,所以将乘数加上一个(+1)。
1
,所以1 x 5 = 5
我们还没有得到7,所以我们再加上一个(+1)。
2
,所以2 x 5 = 10
现在我们超过了7
。因此,2
不是正确的乘数。
让我们回到上一步(我们使用了1
),并记住结果5
。这里数字5
很关键。
(Q.2)我们需要向5
(刚刚从步骤1中获得的数字)添加多少才能得到7
?
我们减去这两个数字:7-5 = 2
。
因此,7 % 5
的答案是2
;
示例B:(5 % 7)
1-我们用哪个数字来乘以7以得到5?
Two Conditions: Multiplier starts from `0`. Output result and should not exceed `5`.
让我们试试:
0
,那么0 x 7 = 0
我们还没有得到5,让我们尝试一个更高的数字。
1
,那么1 x 7 = 7
哦不,我们超过了 5
,让我们回到我们使用 0
得到结果 0
的上一步。
2- 我们需要向 0
(刚才从步骤1中得到的数字)添加多少才能达到左边的数字 5
的值?
很明显这个数字是5。5-0 = 5
5 % 7 = 5
希望有所帮助。
正如其他人指出的一样,模数是基于余数系统的。
我认为更简单的理解模数的方法是,在除数完全除掉被除数(即要被除的数字)后所剩余的部分。因此,如果我们考虑5%7,当你用7去除5时,7只能够整除0次,而当你从5中减去0(7*0),就像我们在小学学习的那样,剩下的余数就是5(即模数)。请参见下面的示例。
0
______
7) 5
__-0____
5
按照相同的逻辑,-5 mod 7 将会是 -5(只有0个7可以放进-5中,-5-0*7 = -5)。同样,-5 mod -7 也是 -5。
更多有趣的情况:
5 mod (-3) = 2, 即 5 - (-3*-1)
(-5) mod (-3) = -2,即 -5 - (-3*1) = -5+3
这只是关于余数的问题。让我向您展示如何操作。
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)
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;
步骤3:5-0 = 5;因此,5%7 = 5
模数是余数系统。
因此7 % 5 = 2。
5 % 7 = 5
3 % 7 = 3
2 % 7 = 2
1 % 7 = 1
在函数中使用它来确定数组索引。这是安全的编程吗?那是另一个问题。我猜。
ex : 26 divided by 7 gives R : 5
可以通过找到最接近除数的完全除数并计算两者之差来轻松找到这个数字。
在7之后,13是下一个完全除26的数字,因为在7之后是8、9、10、11、12,它们都不能完全除以26并给出余数0。
因此,13是最接近7的可整除26的数字。
现在取差值(13〜7)= 5,这就是余数。
注意:为了使其有效,除数应简化为最简形式,例如:如果除数为14,则必须选择7来找到最接近被除数的数字。
(13 ~ 7) = 5
是什么意思?13和7的差是6,而不是5。如果除数是14,则必须选择7是什么意思?答案毫无意义,并且不能得出正确的结果。 - user207421模数运算符会给出“约简剩余系”中的结果。例如,对于模5,有5个整数:0、1、2、3、4。实际上,19=12=5=-2=-9 (mod 7)。主要区别在于编程语言通过“约简剩余系”来给出答案。
正如你所说,百分号(%)用于取模(除法余数)。
在w3schools的JavaScript算术页面中,我们可以在余数部分阅读到我认为是一个很好的解释:
在算术中,两个整数的除法产生一个商和一个余数。
在数学中,模运算的结果是算术除法的余数。
因此,在您特定的情况下,当您尝试将7个香蕉分成5个一组时,您能够创建1组5个(商),并且您将剩下2个香蕉(余数)。
如果将5个香蕉分成7个一组,则无法这样做,因此您仍然剩下5个香蕉(余数)。
1 % 500
返回了1
,但如果你手动进行长除法,1 将完全进入 500 而没有任何余数(但它将是一个小数结果)。阅读答案后,我意识到%
不会产生小数,因此对于 1 % 500,它将返回整数作为余数。如果你仔细想想,这是正确的。 - Ali%
是一个乘法运算符,它返回除法的余数,它不符合模运算的规则,请参见此答案。 - RobG