1

エラー訂正を行っているので、Javaのmod11で2桁を分割する必要があります。

モジュラー計算機を使用することで、これがわかりました。

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 を法とする独自の逆数であるため、特に有用な例ではありません。代わりに、11 を法とする 7 の乗法逆数を求めましょう。

これを行うには、整数の a と b について方程式 7a + 11b = 1 を解きます。ユークリッド アルゴリズムを使用して、a と b の適切な値を見つけます。この場合、a = -3 と b = 2 を取ることができます。b の値を無視し、a ( = -3) を 11 を法とする 7 の逆数とします。11 を法とする算術では、7 かける -3は 1 です。

負の数が気に入らない場合は、代わりに 11 を法とする 7 の逆数を 8 ( = -3 + 11) にすることができます。

したがって、11 を法として 7 で割る代わりに、-3 または 8 を掛けます。たとえば、11 を法とする算術では、9 / 7 = 9 * 8 = 72 = 6 となります。

モジュロが 1 つしかない場合 (たとえば、モジュロ 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 に答える