Java大数类中开方
在jdk8.0中,大数类中没有开方函数,但是牛顿插值法没学过数值分析的又不太容易理解。不过,我们可以使用二分法开方,时间复杂度为O(logn),效率上也不算慢,下面我把代码放上来。
代码如下
说明:此代码为大数开方二分算法
static BigInteger sqrt(BigInteger big) {
BigInteger low=BigInteger.ZERO;
BigInteger high=new BigInteger(big.toString());
BigInteger one=BigInteger.ONE;
BigInteger two=new BigInteger("2");
while(low.compareTo(high)<0) {
BigInteger mid=low.add(high).add(one).divide(two);
BigInteger pow=mid.multiply(mid);
if(pow.compareTo(big)<0) {
low=mid;
}
else if(pow.compareTo(big)>0) {
high=mid.subtract(BigInteger.ONE);
}
else return mid;
}
return high;
}