如何在java中执行以下模运算。
5 ^ 7 mod 11 = 5 ^(2 + 2 + 2 + 1)mod 11。
我尝试使用for循环,但我无法获得所需的输出
答案 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);
由于模数是素数,基数也是如此,有几种可能的优化。