Skip to Content

Find Square Root of BigInteger Example

Submitted By: Sastry Karra

  1. /*
  2.         Find Square Root of BigInteger Example
  3.         This Java example shows how to find square root of BigInteger using
  4.         NEWTON's method.
  5. */
  6.  
  7. import java.math.BigDecimal;
  8. import java.math.BigInteger;
  9. import java.math.MathContext;
  10. import java.math.RoundingMode;
  11.  
  12.  
  13. public class SquareRootOfBigIntegerExample {
  14.        
  15.     public static void main(String[] args) {
  16.        
  17.                 SquareRootOfBigIntegerExample SquareRootOfBigIntegerExample = new SquareRootOfBigIntegerExample();
  18.                 String n = "";
  19.                    
  20.                 MathContext mc =  new MathContext(0, RoundingMode.DOWN);
  21.                 mc = MathContext.DECIMAL32;
  22.  
  23.                 BigInteger my2P100000  = new BigInteger("0");
  24.                 BigInteger two      = new BigInteger("2");
  25.                 BigInteger one      = new BigInteger("1");
  26.                
  27.                 my2P100000  = two.shiftLeft(2000 - 1);
  28.                        
  29.                 System.out.println("2^2000 --  Step 1");
  30.                 System.out.println("Value of 2^2,000 " + my2P100000  );
  31.                 System.out.println("");
  32.                 System.out.println("Finding the Square Root of 2^2000");
  33.                                
  34.                
  35.                 String mys =  my2P100000  + "";
  36.                 n = (mys) ;
  37.                 int firsttime = 0;
  38.                
  39.                 BigDecimal myNumber = new BigDecimal(n);
  40.                 BigDecimal g = new BigDecimal("1");
  41.                 BigDecimal my2 = new BigDecimal("2");
  42.                 BigDecimal epsilon = new BigDecimal("0.0000000001");
  43.        
  44.                 BigDecimal nByg = myNumber.divide(g, 9, BigDecimal.ROUND_FLOOR);
  45.                
  46.                 //Get the value of n/g
  47.                 BigDecimal nBygPlusg = nByg.add(g);
  48.                
  49.                 //Get the value of "n/g + g
  50.                 BigDecimal nBygPlusgHalf =  nBygPlusg.divide(my2, 9, BigDecimal.ROUND_FLOOR);
  51.                
  52.                 //Get the value of (n/g + g)/2
  53.                 BigDecimal  saveg = nBygPlusgHalf;
  54.                 firsttime = 99;
  55.                
  56.                 do
  57.                 {
  58.                         g = nBygPlusgHalf;
  59.                         nByg = myNumber.divide(g, 9, BigDecimal.ROUND_FLOOR);
  60.                         nBygPlusg = nByg.add(g);
  61.                         nBygPlusgHalf =  nBygPlusg.divide(my2, 9, BigDecimal.ROUND_FLOOR);
  62.                         BigDecimal  savegdiff  = saveg.subtract(nBygPlusgHalf);
  63.                            
  64.                         if (savegdiff.compareTo(epsilon) == -1 )
  65.                         {
  66.                             firsttime = 0;
  67.                         }
  68.                         else
  69.                         {
  70.                             saveg = nBygPlusgHalf;
  71.                         }
  72.                        
  73.                 } while (firsttime > 1);
  74.                
  75.                 System.out.println("For " + mys + "\nLength: " + mys.length() + "\nThe Square Root is " + saveg);
  76.            
  77.     }
  78. }
  79.  
  80. /*
  81. Output of this Java example would be
  82. 2^2000 --  Step 1
  83. Value of 2^2,000 114813069527425452423283320117768198402231770208869520047764273682576626139237031385665948631650626991844596463898746277344711896086305533142593135616665318539129989145312280000688779148240044871428926990063486244781615463646388363947317026040466353970904996558162398808944629605623311649536164221970332681344168908984458505602379484807914058900934776500429002716706625830522008132236281291761267883317206598995396418127021779858404042159853183251540889433902091920554957783589672039160081957216630582755380425583726015528348786419432054508915275783882625175435528800822842770817965453762184851149029376
  84.  
  85. Finding the Square Root of 2^2000
  86. For 114813069527425452423283320117768198402231770208869520047764273682576626139237031385665948631650626991844596463898746277344711896086305533142593135616665318539129989145312280000688779148240044871428926990063486244781615463646388363947317026040466353970904996558162398808944629605623311649536164221970332681344168908984458505602379484807914058900934776500429002716706625830522008132236281291761267883317206598995396418127021779858404042159853183251540889433902091920554957783589672039160081957216630582755380425583726015528348786419432054508915275783882625175435528800822842770817965453762184851149029376
  87. Length: 603
  88. The Square Root is 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376.000000000
  89.  
  90. */