0

なんらかの理由で大きな数を扱う場合、モジュラス演算子は正しい出力を与えません。コードを見てください

double x = Math.pow(65,17) % 3233;

出力は想定されていますが2790 、出力は887.0

私はそれがばかげていると確信していますが、私はそれを回避することはできません。前もって感謝します

4

2 に答える 2

7

の結果はMath.pow(65, 17)として正確に表すことができず、可能なdouble最も近い数値に丸められています。

このpow(a, b) % c演算は「剰余累乗」と呼ばれます。ウィキペディアのページには、それを計算する方法について多くのアイデアが含まれています。

1 つの可能性を次に示します。

public static int powmod(int base, int exponent, int modulus) {
    if (exponent < 0)
        throw new IllegalArgumentException("exponent < 0");
    int result = 1;
    while (exponent > 0) {
        if ((exponent & 1) != 0) {
            result = (result * base) % modulus;
        }
        exponent >>>= 1;
        base = (base * base) % modulus;
    }
    return result;
}
于 2012-12-15T22:02:27.260 に答える
1

このように int を使用できます

int n = 65;
for (int i = 1; i < 17; i++)
    n = n * 65 % 3233;
System.out.println(n);

または BigInteger のような

System.out.println(BigInteger.valueOf(65).pow(17).mod(BigInteger.valueOf(3233)));

両方とも印刷

2790
于 2012-12-15T22:06:04.557 に答える