Реализация алгоритма Карацубы на Java для эффективного умножения

Вот реализация алгоритма Карацубы на Java:

import java.math.BigInteger;
public class KaratsubaAlgorithm {
    public static BigInteger karatsuba(BigInteger x, BigInteger y) {
        int n = Math.max(x.bitLength(), y.bitLength());
        // Base case for recursion
        if (n <= 2000) {
            return x.multiply(y);
        }
        n = (n / 2) + (n % 2);
        // Splitting the numbers
        BigInteger b = x.shiftRight(n);
        BigInteger a = x.subtract(b.shiftLeft(n));
        BigInteger d = y.shiftRight(n);
        BigInteger c = y.subtract(d.shiftLeft(n));
        // Recursive steps
        BigInteger ac = karatsuba(a, c);
        BigInteger bd = karatsuba(b, d);
        BigInteger abcd = karatsuba(a.add(b), c.add(d));
        return ac.add(abcd.subtract(ac).subtract(bd).shiftLeft(n)).add(bd.shiftLeft(2 * n));
    }
    public static void main(String[] args) {
        BigInteger x = new BigInteger("123456789");
        BigInteger y = new BigInteger("987654321");
        BigInteger result = karatsuba(x, y);
        System.out.println("Result: " + result);
    }
}

В этой реализации метод karatsuba()принимает два входных параметра BigInteger: xи y, а возвращает свой продукт, используя алгоритм Карацубы. Алгоритм рекурсивно разбивает числа пополам, пока они не достигнут определенного размера, а затем выполняет умножение по формуле, полученной из алгоритма.

Для проверки реализации метод main()демонстрирует пример использования путем умножения двух чисел BigInteger, xи y.и распечатываем результат.