1

我正在做一些纠错,我需要在 Java 中的 mod 11 下除两位数。

现在我知道了,通过使用模块化计算器:

9/1 mod 11 = 9
2/10 mod 11 = 9

问题在于让 Java 计算它。在 Java 中:

(9 / 1) % 11 = 9 - This is fine
(2 / 10) % 11 = 0 - This is not correct.

我知道 Java 在技术上无法执行模块化操作,我的一部分人认为我要么需要以某种方式计算逆,要么使用数组来存储可能的输出值。

4

2 回答 2

5

我认为您正在寻找的是如何找到数字模 11 的乘法逆。

10 是它自己的反模 11,所以它不是一个特别有用的例子。相反,让我们找到 7 模 11 的乘法逆元。

为此,我们对整数 a 和 b 求解方程 7a + 11b = 1。我们使用欧几里得算法为 a 和 b 找到合适的值。在这种情况下,我们可以取 a = -3 和 b = 2。我们忽略 b 的值,取 a ( = -3) 为 7 模 11 的倒数。在模 11 算术中,7 乘以 -3是 1。

如果我们不喜欢负数,我们可以取 7 模 11 的倒数为 8 ( = -3 + 11)。

因此,我们不是除以 7 模 11,而是乘以 -3 或 8。例如,在模 11 算术中,9 / 7 = 9 * 8 = 72 = 6。

如果您只有一个模数可以使用(例如,您只能使用模数 11),那么最好事先计算一个模数为 11 的乘法逆数表并在计算中使用它。

于 2011-10-22T20:07:25.280 回答
1

不确定这是否是您想要的,但是...

public static int divmod(int dividend, int divisor, int mod) {
    if (dividend >= divisor)
        return (dividend / divisor) % mod;
    return mod - dividend;
}

测试它:

divmod(9, 1, 11)  // returns 9
divmod(2, 10, 11) // returns 9
于 2011-10-22T18:04:18.493 回答