python如何计算这个模数?

时间:2015-08-17 03:54:26

标签: python modulo negative-number

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>

4 个答案:

答案 0 :(得分:0)

我不确定你是否在询问python使用的算法,或者为什么答案会以这种方式出现。

如果是后者,请假设对于模n你减去或添加n,直到得到0n-1之间的数字

答案 1 :(得分:0)

它的计算方式如下: -
-10 / 10 = -1
因此余数为9
-1010的最大倍数,小于-1

它类似于9 % 5,将是应该考虑分红的最大数量。

5/5 = 1,因此4

答案 2 :(得分:0)

The Wikipedia article on the modulo operationa % q提供了以下约束:

a = nq + r

代替a = -1q = 10r = 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

aq有不同的符号时,我们会以n = -1开头并将n递减1,直到我们找到最接近的{n}零n*q < a。我们可以通过使用aq进行测试,以便|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=-1y=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,否则使用常规除法算法将除法除以无符号除法。