python如何以数学方式计算这个模数?
<div class='cmt'>
<div class='cmttext'></div>
<div id='replybtn'></div>
<div id='replyform'>
<form method='post' ..... >
<textarea name='reply' ></textarea>
<input type='submit' />
</form>
</div>
</div>
答案 0 :(得分:0)
我不确定你是否在询问python使用的算法,或者为什么答案会以这种方式出现。
如果是后者,请假设对于模n
你减去或添加n
,直到得到0
和n-1
之间的数字
答案 1 :(得分:0)
它的计算方式如下: -
-10 / 10 = -1
,
因此余数为9
。
-10
是10
的最大倍数,小于-1
。
它类似于9 % 5
,将是应该考虑分红的最大数量。
5/5 = 1
,因此4
。
答案 2 :(得分:0)
The Wikipedia article on the modulo operation为a % q
提供了以下约束:
a = nq + r
代替a = -1
,q = 10
和r = 9
,我们发现n必须等于-1。
为n插入-1:
-1 % 10 # Python evaluates this as 9
-1 = n * 10 + r
-1 = -1 * 10 + r
9 = r
使用另一个示例进行测试(再次插入-1表示n):
-7 % 17 # Python evaluates this as 10
-7 = n * 17 + r
-7 = -17 + r
10 = r
具有正分子和负分母的第三个例子:
7 % -17 # Python evaluates this as -10
7 = n * (-17) + r
7 = -1 * (-17) + r
7 = 17 + r
-10 = r
当a
和q
有不同的符号时,我们会以n = -1
开头并将n
递减1,直到我们找到最接近的{n}零n*q < a
。我们可以通过使用a
和q
进行测试,以便|a|
&gt; |q|
:
-100 % 11 # Python evaluates as 10
-100 = n * 11 + r
... -1 # -11 > -100
... -2 # -22 > -100
... -3 ...
... -4 ...
... -5 ...
... -6 ...
... -7 ...
... -8 ...
... -9 # -99 > -100
-100 = -10 * 11 + r # -110 < -100
-100 = -110 + r
10 = r
因此,虽然这可能不是Python实际用于计算模数的算法,但我们至少有一个有用的心智模型来推理给定结果是如何得出的。
答案 3 :(得分:0)
对于至少python-2.7.9,首先执行整数除法x/y
并将截断逼近零来完成。然后计算x
和商乘以y
(即x - (x/y)*y
)的差异。如果结果非零且y
符号不同,则y
会添加到结果中。
例如,对于您的示例x=-1
和y=10
,我们首先计算x/y
为0(-0.1轮到0)。那么差异是-1 - 0
,即-1
。现在-1
非零并且标记与10
不同,因此我们向其添加10
并获取9
。
对于python3(3.4.2),它有点复杂,因为python3的整数实际上是long
s所以division algorithm是用软件而不是硬件实现的,但基本上是相同的。除非根据平台使用基数2 ^ N得到一些合适的数字N
,否则使用常规除法算法将除法除以无符号除法。