51nod 1166 大数开平方(高精度+牛顿迭代法)
Posted 7391_KID
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod 1166 大数开平方(高精度+牛顿迭代法)相关的知识,希望对你有一定的参考价值。
分析:直接用二分还是会T,用更快的牛顿迭代法。把问题转化为求x^2-n=0的根,假设解为x0,当前解为x且x^2-n>0,在(x,x^2-n)处作切线,与x轴交点横坐标为新的x,然后迭代即可,比二分法快,但是貌似只能用在凹函数或凸函数上。。
java水高精度真是666。。。
1 import java.io.*; 2 import java.util.*; 3 import java.math.BigInteger; 4 public class Main { 5 public static void main(String[] args){ 6 Scanner cin=new Scanner(System.in); 7 String a; 8 a=cin.next(); 9 BigInteger n=new BigInteger(a); 10 if(n.toString().length()%2==0) 11 a=a.substring(0,n.toString().length()/2+1); 12 else 13 a=a.substring(0,(1+ n.toString().length())/2); 14 BigInteger x=new BigInteger(a); 15 BigInteger Two=new BigInteger("2"); 16 if(a=="1"){ 17 System.out.println(1); 18 }else{ 19 while(n.compareTo(x.multiply(x))<0){ 20 x=(x.add(n.divide(x))).divide(Two); 21 } 22 System.out.println(x); 23 } 24 cin.close(); 25 } 26 }
以上是关于51nod 1166 大数开平方(高精度+牛顿迭代法)的主要内容,如果未能解决你的问题,请参考以下文章