# Closest perfect square and its distance

Given a positive integer . The task is to find the perfect square number closest to N and steps required to reach this number from N.

Note: The closest perfect square to N can be either less than, equal to or greater than N and steps is referred to the difference between N and the closest perfect square.

Examples:

Input: N = 1500
Output: Perfect square = 1521, Steps = 21
For N = 1500
Closest perfect square greater than N is 1521.
So steps required is 21.
Closest perfect square less than N is 1444.
So steps required is 56.
The minimum of these two is 1521 with steps 21.

Input: N = 2
Output: Perfect Square = 1, Steps = 1
For N = 2
Closest perfect square greater than N is 4.
So steps required is 2.
Closest perfect square less than N is 1.
So steps required is 1.
The minimum of these two is 1.

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

Approach:

• If N is a perefct square then print N and steps as 0.
• Else, find the first perfect square number > N and note its difference with N.
• Then, find the first perfect square number < N and note its difference with N.
• And print the perfect square resulting in the minimum of these two differences obtained and also the difference as the minimum steps.

Below is the implementation of the above approach:

## C++

 `// CPP program to find the closest perfect square ` `// taking minimum steps to reach from a number ` ` `  `#include ` `using` `namespace` `std; ` ` `  ` `  `    ``// Function to check if a number is ` `    ``// perfect square or not ` `    ``bool` `isPerfect(``int` `N) ` `    ``{ ` `        ``if` `((``sqrt``(N) - ``floor``(``sqrt``(N))) != 0) ` `            ``return` `false``; ` `        ``return` `true``; ` `    ``} ` ` `  `    ``// Function to find the closest perfect square ` `    ``// taking minimum steps to reach from a number ` `    ``void` `getClosestPerfectSquare(``int` `N) ` `    ``{ ` `        ``if` `(isPerfect(N)) ` `        ``{ ` `            ``cout< diff2) ` `            ``cout<

## Java

 `// Java program to find the closest perfect square ` `// taking minimum steps to reach from a number ` ` `  `class` `GFG { ` ` `  `    ``// Function to check if a number is ` `    ``// perfect square or not ` `    ``static` `boolean` `isPerfect(``int` `N) ` `    ``{ ` `        ``if` `((Math.sqrt(N) - Math.floor(Math.sqrt(N))) != ``0``) ` `            ``return` `false``; ` `        ``return` `true``; ` `    ``} ` ` `  `    ``// Function to find the closest perfect square ` `    ``// taking minimum steps to reach from a number ` `    ``static` `void` `getClosestPerfectSquare(``int` `N) ` `    ``{ ` `        ``if` `(isPerfect(N)) { ` `            ``System.out.println(N + ``" "` `                               ``+ ``"0"``); ` `            ``return``; ` `        ``} ` ` `  `        ``// Variables to store first perfect ` `        ``// square number ` `        ``// above and below N ` `        ``int` `aboveN = -``1``, belowN = -``1``; ` `        ``int` `n1; ` ` `  `        ``// Finding first perfect square ` `        ``// number greater than N ` `        ``n1 = N + ``1``; ` `        ``while` `(``true``) { ` `            ``if` `(isPerfect(n1)) { ` `                ``aboveN = n1; ` `                ``break``; ` `            ``} ` `            ``else` `                ``n1++; ` `        ``} ` ` `  `        ``// Finding first perfect square ` `        ``// number less than N ` `        ``n1 = N - ``1``; ` `        ``while` `(``true``) { ` `            ``if` `(isPerfect(n1)) { ` `                ``belowN = n1; ` `                ``break``; ` `            ``} ` `            ``else` `                ``n1--; ` `        ``} ` ` `  `        ``// Variables to store the differences ` `        ``int` `diff1 = aboveN - N; ` `        ``int` `diff2 = N - belowN; ` ` `  `        ``if` `(diff1 > diff2) ` `            ``System.out.println(belowN + ``" "` `+ diff2); ` `        ``else` `            ``System.out.println(aboveN + ``" "` `+ diff1); ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String args[]) ` `    ``{ ` `        ``int` `N = ``1500``; ` ` `  `        ``getClosestPerfectSquare(N); ` `    ``} ` `} `

## Python3

 `# Python3 program to find the closest  ` `# perfect square taking minimum steps ` `# to reach from a number  ` ` `  `# Function to check if a number is  ` `# perfect square or not ` `from` `math ``import` `sqrt, floor  ` `def` `isPerfect(N): ` `    ``if` `(sqrt(N) ``-` `floor(sqrt(N)) !``=` `0``): ` `        ``return` `False` `    ``return` `True` ` `  `# Function to find the closest perfect square  ` `# taking minimum steps to reach from a number  ` `def` `getClosestPerfectSquare(N): ` `    ``if` `(isPerfect(N)):  ` `        ``print``(N, ``"0"``)  ` `        ``return` ` `  `    ``# Variables to store first perfect  ` `    ``# square number above and below N  ` `    ``aboveN ``=` `-``1` `    ``belowN ``=` `-``1` `    ``n1 ``=` `0` ` `  `    ``# Finding first perfect square  ` `    ``# number greater than N  ` `    ``n1 ``=` `N ``+` `1` `    ``while` `(``True``): ` `        ``if` `(isPerfect(n1)): ` `            ``aboveN ``=` `n1  ` `            ``break` `        ``else``: ` `            ``n1 ``+``=` `1` ` `  `    ``# Finding first perfect square  ` `    ``# number less than N  ` `    ``n1 ``=` `N ``-` `1` `    ``while` `(``True``):  ` `        ``if` `(isPerfect(n1)):  ` `            ``belowN ``=` `n1  ` `            ``break` `        ``else``: ` `            ``n1 ``-``=` `1` `             `  `    ``# Variables to store the differences  ` `    ``diff1 ``=` `aboveN ``-` `N  ` `    ``diff2 ``=` `N ``-` `belowN  ` ` `  `    ``if` `(diff1 > diff2): ` `        ``print``(belowN, diff2)  ` `    ``else``: ` `        ``print``(aboveN, diff1) ` ` `  `# Driver code  ` `N ``=` `1500` `getClosestPerfectSquare(N) ` ` `  `# This code is contributed  ` `# by sahishelangia `

## C#

 `// C# program to find the closest perfect square ` `// taking minimum steps to reach from a number ` `using` `System; ` ` `  `class` `GFG { ` ` `  `    ``// Function to check if a number is ` `    ``// perfect square or not ` `    ``static` `bool` `isPerfect(``int` `N) ` `    ``{ ` `        ``if` `((Math.Sqrt(N) - Math.Floor(Math.Sqrt(N))) != 0) ` `            ``return` `false``; ` `        ``return` `true``; ` `    ``} ` ` `  `    ``// Function to find the closest perfect square ` `    ``// taking minimum steps to reach from a number ` `    ``static` `void` `getClosestPerfectSquare(``int` `N) ` `    ``{ ` `        ``if` `(isPerfect(N)) { ` `            ``Console.WriteLine(N + ``" "` `                            ``+ ``"0"``); ` `            ``return``; ` `        ``} ` ` `  `        ``// Variables to store first perfect ` `        ``// square number ` `        ``// above and below N ` `        ``int` `aboveN = -1, belowN = -1; ` `        ``int` `n1; ` ` `  `        ``// Finding first perfect square ` `        ``// number greater than N ` `        ``n1 = N + 1; ` `        ``while` `(``true``) { ` `            ``if` `(isPerfect(n1)) { ` `                ``aboveN = n1; ` `                ``break``; ` `            ``} ` `            ``else` `                ``n1++; ` `        ``} ` ` `  `        ``// Finding first perfect square ` `        ``// number less than N ` `        ``n1 = N - 1; ` `        ``while` `(``true``) { ` `            ``if` `(isPerfect(n1)) { ` `                ``belowN = n1; ` `                ``break``; ` `            ``} ` `            ``else` `                ``n1--; ` `        ``} ` ` `  `        ``// Variables to store the differences ` `        ``int` `diff1 = aboveN - N; ` `        ``int` `diff2 = N - belowN; ` ` `  `        ``if` `(diff1 > diff2) ` `            ``Console.WriteLine(belowN + ``" "` `+ diff2); ` `        ``else` `            ``Console.WriteLine(aboveN + ``" "` `+ diff1); ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``int` `N = 1500; ` ` `  `        ``getClosestPerfectSquare(N); ` `    ``} ` `} ` `// This code is contributed by anuj_67.. `

## PHP

 ` ``\$diff2``) ` `        ``echo` `\$belowN``, ``" "` `, ``\$diff2``; ` `    ``else` `        ``echo` `\$aboveN``, ``" "``, ``\$diff1``; ` `} ` ` `  `// Driver code ` `\$N` `= 1500; ` `getClosestPerfectSquare(``\$N``); ` ` `  `// This code is contributed by ajit. ` `?> `

Output:

```1521 21
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.