51nod 1166 大數開平方(高精度+牛頓叠代法)
阿新 • • 發佈:2017-07-10
ply 高精度 code blog compareto ring args 坐標 凸函數
分析:直接用二分還是會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=newScanner(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=newBigInteger(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 大數開平方(高精度+牛頓叠代法)