# Closest perfect square and its distance

• Difficulty Level : Medium
• Last Updated : 06 Sep, 2021

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.

Approach:

• If N is a perfect 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.``?>`

## Javascript

 ``
Output:
`1521 21`

My Personal Notes arrow_drop_up