Sunday, November 3, 2013

BigInteger sqrt method

Since Java doesn't have a sqrt method for BigInteger, I found this one which works fine.
It's short and practical

source: http://faruk.akgul.org/blog/javas-missing-algorithm-biginteger-sqrt/

BigInteger sqrt(BigInteger n) {
  BigInteger a = BigInteger.ONE;
  BigInteger b = new BigInteger(n.shiftRight(5).add(new BigInteger("8")).toString());
  while(b.compareTo(a) >= 0) {
    BigInteger mid = new BigInteger(a.add(b).shiftRight(1).toString());
    if(mid.multiply(mid).compareTo(n) > 0) b = mid.subtract(BigInteger.ONE);
    else a = mid.add(BigInteger.ONE);
  }
  return a.subtract(BigInteger.ONE);
}
 

No comments:

Post a Comment