Java BigInteger求任意n(n∈N*)次方根的实现

来源:互联网 发布:租房php源码 编辑:程序博客网 时间:2024/05/26 17:49

原理是newton切线法,就不用介绍了吧


package com.swu.math;import java.math.BigDecimal;import java.math.BigInteger;public class Test{//num是被开方数,n是开方次数,precision设置保留几位小数public static String  rootN_Decimal(String num,int n,int precision){BigDecimal x=new BigDecimal(new BigInteger(num).divide(new BigInteger(n+"")));BigDecimal x0=BigDecimal.ZERO;BigDecimal e=new BigDecimal("0.1");for(int i=1;i<precision;++i)e=e.divide(BigDecimal.TEN,i+1,BigDecimal.ROUND_HALF_EVEN);BigDecimal K=new BigDecimal(num);BigDecimal m=new BigDecimal(n);long i=0;while(x.subtract(x0).abs().compareTo(e)>0){x0=x;x=x.add(K.subtract(x.pow(n)).divide(m.multiply(x.pow(n-1)),precision,BigDecimal.ROUND_HALF_EVEN));++i;}return x+" "+i;}public static void main(String[] args){BigInteger b=new BigInteger("123456789123456789123456789");b=b.pow(10);System.out.println(rootN_Decimal(b.toString(), 10, 2));}}

运行结果

123456789123456789123456789.00 5117

原创粉丝点击