使用for循环的Java模运算

时间:2015-03-12 16:12:17

标签: java

如何在java中执行以下模运算。

5 ^ 7 mod 11 = 5 ^(2 + 2 + 2 + 1)mod 11。

我尝试使用for循环,但我无法获得所需的输出

3 个答案:

答案 0 :(得分:1)

您不需要为此操作使用循环。你可以使用:

Math.pow(5.0,7.0) % 11.0

答案 1 :(得分:0)

以下两种方式:

public void testMath(int x, int y, int z) {
    double pow = Math.pow(x, y);
    double mod = pow % z;
    System.out.println("Math - pow(" + x + "," + y + "," + z + ") = " + pow + " mod = " + mod);
}

public void testLoop(int x, int y, int z) {
    double v = 1;
    for (int i = 0; i < y; i++) {
        v *= x;
        v %= z;
    }
    System.out.println("Math - pow(" + x + "," + y + "," + z + ") = " + " mod = " + v);
}

public void test() {
    testMath(5, 7, 11);
    testLoop(5, 7, 11);
}

答案 2 :(得分:0)

由于这似乎是作业,我将给出可能意图的递归版本:使用指数的二进制分解:

x^(2n) = q * q where q = 2^n

int pow(int base, int exp, int modulo) {
    if (exp == 0) {
        return 1;
    }
    base %= modulo;
    if (exp == 1) {
        return base;
    }
    if (exp % 2 == 1) {
        return (base * pow(base, exp, modulo)) % modulo;
    }
    int sqroot = pow(base, exp / 2, modulo) % modulo;
    return (sqroot * sqroot) % modulo;
}

int result = pow(5, 7, 11);

由于模数是素数,基数也是如此,有几种可能的优化。