Given an integer N and a tolerance level L, the task is to find the square root of that number using Newton’s Method.
Examples:
Input: N = 16, L = 0.0001
Output: 4
42 = 16
Input: N = 327, L = 0.00001
Output: 18.0831
Newton’s Method:
Let N be any number then the square root of N can be given by the formula:
root = 0.5 * (X + (N / X)) where X is any guess which can be assumed to be N or 1.
- In the above formula, X is any assumed square root of N and root is the correct square root of N.
- Tolerance limit is the maximum difference between X and root allowed.
Approach: The following steps can be followed to compute the answer:
- Assign X to the N itself.
- Now, start a loop and keep calculating the root which will surely move towards the correct square root of N.
- Check for the difference between the assumed X and calculated root, if not yet inside tolerance then update root and continue.
- If the calculated root comes inside the tolerance allowed then break out of the loop.
- Print the root.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Function to return the square root of // a number using Newtons method double squareRoot( double n, float l) { // Assuming the sqrt of n as n only double x = n; // The closed guess will be stored in the root double root; // To count the number of iterations int count = 0; while (1) { count++; // Calculate more closed x root = 0.5 * (x + (n / x)); // Check for closeness if ( abs (root - x) < l) break ; // Update root x = root; } return root; } // Driver code int main() { double n = 327; float l = 0.00001; cout << squareRoot(n, l); return 0; } |
Java
// Java implementation of the approach class GFG { // Function to return the square root of // a number using Newtons method static double squareRoot( double n, double l) { // Assuming the sqrt of n as n only double x = n; // The closed guess will be stored in the root double root; // To count the number of iterations int count = 0 ; while ( true ) { count++; // Calculate more closed x root = 0.5 * (x + (n / x)); // Check for closeness if (Math.abs(root - x) < l) break ; // Update root x = root; } return root; } // Driver code public static void main (String[] args) { double n = 327 ; double l = 0.00001 ; System.out.println(squareRoot(n, l)); } } // This code is contributed by AnkitRai01 |
Python3
# Python3 implementation of the approach # Function to return the square root of # a number using Newtons method def squareRoot(n, l) : # Assuming the sqrt of n as n only x = n # To count the number of iterations count = 0 while ( 1 ) : count + = 1 # Calculate more closed x root = 0.5 * (x + (n / x)) # Check for closeness if ( abs (root - x) < l) : break # Update root x = root return root # Driver code if __name__ = = "__main__" : n = 327 l = 0.00001 print (squareRoot(n, l)) # This code is contributed by AnkitRai01 |
C#
// C# implementation of the approach using System; class GFG { // Function to return the square root of // a number using Newtons method static double squareRoot( double n, double l) { // Assuming the sqrt of n as n only double x = n; // The closed guess will be stored in the root double root; // To count the number of iterations int count = 0; while ( true ) { count++; // Calculate more closed x root = 0.5 * (x + (n / x)); // Check for closeness if (Math.Abs(root - x) < l) break ; // Update root x = root; } return root; } // Driver code public static void Main() { double n = 327; double l = 0.00001; Console.WriteLine(squareRoot(n, l)); } } // This code is contributed by AnkitRai01 |
Javascript
<script> // Javascript implementation of the approach // Function to return the square root of // a number using Newtons method function squareRoot(n, l) { // Assuming the sqrt of n as n only let x = n; // The closed guess will be stored in the root let root; // To count the number of iterations let count = 0; while ( true ) { count++; // Calculate more closed x root = 0.5 * (x + (n / x)); // Check for closeness if (Math.abs(root - x) < l) break ; // Update root x = root; } return root.toFixed(4); } let n = 327; let l = 0.00001; document.write(squareRoot(n, l)); // This code is contributed by divyesh072019. </script> |
18.0831
Time Complexity: O(log N)
Auxiliary Space: O(1)
Recursive Approach:
- Start by defining the function findSqrt that takes three arguments – the number whose square root is to be found N, the current guess guess, and the tolerance level tolerance.
- Compute the next guess using the Newton’s formula next_guess = (guess + N/guess) / 2.
- Check if the difference between the current guess and the next guess is <= tolerance level tolerance using the abs() function. If the condition is satisfied, return the next guess.
- Otherwise, recursively call the findSqrt function with the new guess.
- Last print the result
Below is the implementation of the above approach:
C++
#include <iostream> #include <cmath> using namespace std; double findSqrt( double N, double guess, double tolerance) { double next_guess = (guess + N/guess) / 2; if ( abs (guess - next_guess) <= tolerance) { return next_guess; } else { return findSqrt(N, next_guess, tolerance); } } int main() { double N=327, L=0.00001; double guess = N/2; // Initialize the guess to N/2 double sqrt = findSqrt(N, guess, L); cout << sqrt << endl; return 0; } |
Java
public class Main { public static double findSqrt( double N, double guess, double tolerance) { double nextGuess = (guess + N / guess) / 2 ; if (Math.abs(guess - nextGuess) <= tolerance) { return nextGuess; } else { return findSqrt(N, nextGuess, tolerance); } } public static void main(String[] args) { double N = 327 , L = 0.00001 ; double guess = N / 2 ; // Initialize the guess to N/2 double sqrt = findSqrt(N, guess, L); System.out.printf( "%.4f%n" , sqrt); } } // This code is contributed by Samim Hossain Mondal. |
18.0831
Time Complexity: O(log N), where N is the input number.
Auxiliary Space: O(log N)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!