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 大数开平方(高精度+牛顿迭代法)的主要内容,如果未能解决你的问题,请参考以下文章

一种高效整数开平方算法:逐比特确认法

go 牛顿法开平方

51nod 1166 K进制下的大数 (快速幂)

牛顿迭代的应用和关键 迭代提升算子精度

牛顿迭代的应用和关键 迭代提升算子精度

方程求根——牛顿迭代法