feat: binpow

This commit is contained in:
2025-07-23 00:13:41 +08:00
parent 7985239605
commit 52edcb783a

View File

@@ -21,14 +21,17 @@ public class BinaryExponentiation {
}
}
public static BigInteger binPow(BigInteger a, BigInteger b) {
public static BigInteger binPow(BigInteger base, BigInteger exponent) {
if (exponent.compareTo(BigInteger.ZERO) < 0) {
throw new ArithmeticException("Negative exponent");
}
BigInteger result = BigInteger.ONE;
while (b.compareTo(BigInteger.ZERO) > 0) {
if (b.mod(BigInteger.valueOf(2)).compareTo(BigInteger.ONE) == 0) {
result = result.multiply(a);
while (exponent.compareTo(BigInteger.ZERO) > 0) {
if (exponent.mod(BigInteger.valueOf(2)).compareTo(BigInteger.ONE) == 0) {
result = result.multiply(base);
}
a = a.multiply(a);
b = b.divide(BigInteger.valueOf(2));
base = base.multiply(base);
exponent = exponent.divide(BigInteger.valueOf(2));
}
return result;
}