免费负数模运算计算器

输入被除数和除数来计算模运算结果。

理解负数的模运算

取模运算 a mod na \bmod n 通常被教授为除法后的余数,但当负数出现时,其定义变得模糊。不同的约定——尤其是在编程语言中——决定了余数是正还是负。这个免费在线模计算器支持负被除数和除数,让您可以切换两种最常见的解释:截断除法模和向下取整除法模。

模运算的两种常见模型

在数论中,余数总是非负的(欧几里得除法),但实际实现常常偏离这一理想。软件中使用的两种主要定义是:

  1. 截断除法模 – 余数为 r=a−n⋅trunc⁡(a/n)r = a - n \cdot \operatorname{trunc}(a / n)。
    结果符号与被除数 aa 相同。

  2. 向下取整除法模 – 余数为 r=a−n⋅floor⁡(a/n)r = a - n \cdot \operatorname{floor}(a / n)。
    结果符号与除数 nn 相同。

对于正数,两种定义结果相同,但对于负数则可能产生不同的结果。

符号规则行为

下表总结了每种定义下所有被除数和除数组合的余数符号:

被除数 aa除数 nn截断(符号 = aa 的符号)向下取整(符号 = nn 的符号)
正正正正
负正负正
正负正负
负负负负

说明区别的例子

  • a=−9, n=4a = -9,\ n = 4
    截断:−9=4×(−2)−1-9 = 4 \times (-2) - 1 → 余数 −1-1.
    向下取整:−9=4×(−3)+3-9 = 4 \times (-3) + 3 → 余数 33.

  • a=9, n=−4a = 9,\ n = -4
    截断:9=(−4)×(−2)+19 = (-4) \times (-2) + 1 → 余数 11.
    向下取整:9=(−4)×(−3)−39 = (-4) \times (-3) - 3 → 余数 −3-3.

  • a=−9, n=−4a = -9,\ n = -4
    两种定义使用相同的商 22:−9=(−4)×2−1-9 = (-4) \times 2 - 1.
    两种情况余数都是 −1-1.

为什么存在两种定义

编程语言历史上为其 mod 运算符采用了截断或向下取整语义。例如,C 和 Java 在 % 中使用截断除法,而 Python 使用向下取整除法。现在许多语言提供独立的函数(例如 Java 的 Math.floorMod),以便开发者选择最适合其应用的行为。当您处理循环数据结构、索引循环、或期望非负余数的数学公式时,这些差异至关重要。

使用此负数模计算器

本工具允许您计算任意整数(正或负)的 a mod na \bmod n,并同时查看截断和向下取整约定下的结果。您还可以查看逐步除法过程,使其成为调试代码或学习负数取模工作原理的理想伴侣。只需输入被除数和除数,计算器将立即根据您选择的定义返回余数。

无论您是在学习模运算,还是在具有特定模行为的语言中实现算法,此负数模计算器都能简化您手动计算结果的验证。

常见问题

1. 截断除法模和向下取整除法模有什么区别?

截断除法模使用 trunc() 函数将商向零舍入,因此余数与被除数同号。向下取整除法模使用 floor() 向负无穷舍入,因此余数与除数同号。对于负数,这两种定义可能给出不同的余数,而对于正数则结果相同。

2. 取模运算中余数何时为负?

在截断除法下,只要被除数为负,余数就为负。在向下取整除法下,除数为负时余数为负。当被除数和除数均为负时,两种定义都得到负余数。

3. 如何使用两种方法计算 -9 mod 4?

使用截断除法:-9 ÷ 4 = -2.25,trunc(-2.25) = -2,余数 = -9 - 4×(-2) = -1。使用向下取整除法:floor(-2.25) = -3,余数 = -9 - 4×(-3) = 3。因此截断结果为 -1,向下取整结果为 +3。

4. 这个负数模计算器有什么功能?

它可以计算任意整数(包括负被除数和除数)的模运算。您可以选择截断除法或向下取整除法来查看余数如何变化。该工具还会显示底层的除法步骤,帮助您理解两种约定之间的区别。

5. 所有编程语言对负数都使用相同的模规则吗?

不是。C、C++ 和 Java 在其 % 运算符中使用截断除法,而 Python 使用向下取整除法。许多语言现在通过独立的函数提供两种变体(例如 Java 的 Math.floorMod)。为避免意外结果,务必查阅您所用语言的文档。

使用方法

  1. 在第一个输入框中输入被除数(a)。这是被除的数。
  2. 在第二个输入框中输入除数(n)。这是除数。
  3. 计算器会在您输入时实时自动计算截断和向下取整两种模运算结果。