feat: binpow
This commit is contained in:
@@ -21,14 +21,17 @@ public class BinaryExponentiation {
|
||||
}
|
||||
}
|
||||
|
||||
public static BigInteger binPow(BigInteger a, BigInteger b) {
|
||||
BigInteger result = BigInteger.ONE;
|
||||
while (b.compareTo(BigInteger.ZERO) > 0) {
|
||||
if (b.mod(BigInteger.valueOf(2)).compareTo(BigInteger.ONE) == 0) {
|
||||
result = result.multiply(a);
|
||||
public static BigInteger binPow(BigInteger base, BigInteger exponent) {
|
||||
if (exponent.compareTo(BigInteger.ZERO) < 0) {
|
||||
throw new ArithmeticException("Negative exponent");
|
||||
}
|
||||
a = a.multiply(a);
|
||||
b = b.divide(BigInteger.valueOf(2));
|
||||
BigInteger result = BigInteger.ONE;
|
||||
while (exponent.compareTo(BigInteger.ZERO) > 0) {
|
||||
if (exponent.mod(BigInteger.valueOf(2)).compareTo(BigInteger.ONE) == 0) {
|
||||
result = result.multiply(base);
|
||||
}
|
||||
base = base.multiply(base);
|
||||
exponent = exponent.divide(BigInteger.valueOf(2));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user