首页 > 代码库 > 51nod 1166 大数开平方(高精度+牛顿迭代法)
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 大数开平方(高精度+牛顿迭代法)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。