1. 程式人生 > >51nod 1166 大數開平方(高精度+牛頓叠代法)

51nod 1166 大數開平方(高精度+牛頓叠代法)

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=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 大數開平方(高精度+牛頓叠代法)