diff --git a/Searches/SquareRootBinarySearch.java b/Searches/SquareRootBinarySearch.java new file mode 100644 index 000000000..1790f8abc --- /dev/null +++ b/Searches/SquareRootBinarySearch.java @@ -0,0 +1,59 @@ +package Searches; + +import java.util.Scanner; + +/** + * Given an integer x, find the square root of x. If x is not a perfect square, then return floor(√x). + *
+ * For example, + * if x = 5, The answer should be 2 which is the floor value of √5. + *
+ * The approach that will be used for solving the above problem is not going to be a straight forward Math.sqrt(). + * Instead we will be using Binary Search to find the square root of a number in the most optimised way. + * + * @author sahil + */ +public class SquareRootBinarySearch { + + /** + * This is the driver method. + * + * @param args Command line arguments + */ + public static void main(String args[]) { + Scanner sc = new Scanner(System.in); + System.out.print("Enter a number you want to calculate square root of : "); + int num = sc.nextInt(); + long ans = squareRoot(num); + System.out.println("The square root is : " + ans); + } + + /** + * This function calculates the floor of square root of a number. + * We use Binary Search algorithm to calculate the square root + * in a more optimised way. + * + * @param num Number + * @return answer + */ + private static long squareRoot(long num) { + if (num == 0 || num == 1) { + return num; + } + long l = 1; + long r = num; + long ans = 0; + while (l <= r) { + long mid = l + (r - l) / 2; + if (mid == num / mid) + return mid; + else if (mid < num / mid) { + ans = mid; + l = mid + 1; + } else { + r = mid - 1; + } + } + return ans; + } +}