簡體   English   中英

Java模塊化部門

[英]Java modular division

我正在做一些糾錯,我需要在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在技術上不能執行模塊化操作,而我的一部分則在想我要么需要以某種方式計算逆,要么使用數組來存儲可能的輸出值。

我認為您正在尋找的是如何找到以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為模的乘法逆的表,並在計算中使用該表。

不確定這是否是您想要的,但是...

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM