Java模块化部门

Ton*_*ony 1 java division modular-arithmetic

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

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

9/1 mod 11 = 9
2/10 mod 11 = 9
Run Code Online (Sandbox Code Playgroud)

问题出在让Java计算这一点。在Java中:

(9 / 1) % 11 = 9 - This is fine
(2 / 10) % 11 = 0 - This is not correct.
Run Code Online (Sandbox Code Playgroud)

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

Luk*_*ard 5

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

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

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

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

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

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