BigInteger - raiz quadrada

Para um algoritimo preciso pegar o resultado da raiz quadrada de 600851475143, mas o Math.sqrt() não suporta o tamanho do arquivo =/. E o BigInteger não tem nenhuma operação de raiz quadrada. Alguém conhece outra api?

double res = Math.pow(600851475143d, 1/2);

package guj;

import java.math.BigInteger;

public class ISqrt {

    /**
     * http://en.wikipedia.org/wiki/Integer_square_root
     * @param n The integer value
     * @return isqrt (n)
     */
    public static BigInteger isqrt (BigInteger n) {
        if (n.signum() == -1)
            throw new ArithmeticException("Can't evaluate square roots of negative numbers");
        else if (n.signum() == 0)
            return BigInteger.ZERO;
        BigInteger xk = n, xk1;
        BigInteger two = BigInteger.valueOf(2L);
        while (true) {
            xk1 = xk.add(n.divide(xk)).divide(two);
            if (xk1.subtract(xk).abs().compareTo(BigInteger.ONE) <= 0)
                break;
            xk = xk1;
        }
        return xk1;
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println (ISqrt.isqrt(BigInteger.valueOf (1234).multiply(BigInteger.valueOf(1236))));
        System.out.println (ISqrt.isqrt(BigInteger.valueOf (123456789).multiply(BigInteger.valueOf(123456789))));
    }

}

Valeu pessoal =), tenho que pegar algum livro de Teoria dos Números para fazer certas coisas na mão.