我正在做一些纠错,我需要在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在技术上不能执行模运算,我的一部分想法是我要么需要以某种方式计算逆数,要么使用数组来存储可能的输出值。
发布于 2011-10-23 04:07:25
我想你要找的是如何求模11的乘法逆。
10是它自己的模数11的逆数,所以它不是一个特别有用的例子。取而代之的是,让我们找到7模11的乘法逆。
为此,我们求解整数形式的a和b的方程7a + 11b =1。我们使用Euclidean algorithm为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-23 02:04:18
不知道这是不是你想要的,但是...
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 9https://stackoverflow.com/questions/7860795
复制相似问题