您甚至不需要BigInteger
为此,您可以使用 BigMod 分治算法利用以下mod
操作属性来计算该值
(A * B) mod n = ((A mod n) * (B mod n)) mod n
那么(B ^ c) mod n
可以看成是属性的一个特例:
(B ^ c) mod n = ((B mod n) * (B mod n) ... c times) mod n
以下代码进行计算:
public class BigModExample {
public static long bigMod(long b, long c, int n) {
if (c == 0) {
return 1;
}
// Returns: (b ^ c/2) mod n
long b2 = bigMod(b, c / 2, n);
// Even exponent
if ((c & 1) == 0) {
// [((b ^ c/2) mod n) * ((b ^ c/2) mod n)] mod n
return (b2 * b2) % n;
} else {
// Odd exponent
// [(b mod n) * ((b ^ c/2) mod n) * ((b ^ c/2) mod n)] mod n
return ((b % n) * (b2 * b2)) % n;
}
}
public static void main(String... args) {
System.out.println(bigMod(48, 26, 2401));
}
}
印刷
1128