2011-10-22 83 views
1

我正在做一些錯誤更正,並且我需要在模塊11下用Java劃分兩個數字。Java模塊化部門

現在,這個我知道,從採用了模塊化的計算器:

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可以在技術上進行模塊化操作,和我的一部分是認爲我要麼需要以某種方式計算逆,或使用一個數組來存儲可能的輸出值。

+7

Err,2/10爲0.並且0%11爲0.爲什麼會是9? –

+3

因爲我是在mod 11下做的。不是正常的劃分。 – Tony

+0

我剛剛做的是:(2 * 10)%11 = 9.這似乎給了我正確的答案。 – Tony

回答

4

我想你在找什麼是如何找到的乘法逆模數爲11.

10是它自己的逆模11,所以它不是一個特別有用的例子。相反,讓我們找到7模11的乘法倒數。

要做到這一點,我們用a和b的整數求解方程7a + 11b = 1。我們使用Euclidean algorithm爲a和b找到合適的值。在這種情況下,我們可以取a = -3和b = 2。我們忽略b的值,並取一個(= -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的表並在計算中使用它。

+0

感謝那個盧克,我懷疑這就是我必須要做的。你有什麼建議來生成這樣的表格嗎?我猜我需要一個多維數組? – Tony

+1

我不明白爲什麼你需要一個多維數組。如果你只工作在模11上,計算1到10模11的倒數並將它們放入一維數組中。如果你正在使用大量的模數,或者任何大的模數,那麼桌子就不是一個好主意。 –

+0

感謝盧克,我對自己想做的事情感到有點困惑(對我來說還是比較早):)。我現在用一個數組構建了一個反向表,現在一切都按計劃進行。謝謝你的幫助!! – Tony

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 
+0

謝謝Óscar,這適用於某些數字對,但對其他人無效。 – Tony

+0

給我一組數字進行測試,特別是那些失敗的數字,我會看看我能做些什麼來幫助你 –