# Minimize increments or decrements by 2 to convert given value to a perfect square

• Last Updated : 26 Apr, 2021

Given an integer N, the task is to count the minimum number of times N needs to be incremented or decremented by 2 to convert it to a perfect square.

Examples:

Input: N = 18
Output:
Explanation: N – 2 = 16(= 42). Therefore, a single decrement operation is required.

Input: N = 15
Output:
Explanation:
N – 2 * 3 = 15 – 6 = 9 (= 32). Therefore, 3 decrement operations are required.
N + 2 * 5 = 25 (= 52). Therefore, 5 increment operations are required.
Therefore, minimum number of operations required is 3.

Approach: Follow the steps below to solve this problem:

Below is the implementation of the above approach.

## C++

 `// C++ program to implement``// the above approach``#include ``using` `namespace` `std;` `// Function to find the minimum number``// of operations required to make``// N a perfect square``int` `MinimumOperationReq(``int` `N)``{``    ``// Stores count of operations``    ``// by performing decrements``    ``int` `cntDecr = 0;` `    ``// Stores value of N``    ``int` `temp = N;` `    ``// Decrement the value of temp``    ``while` `(temp > 0) {` `        ``// Stores square root of temp``        ``int` `X = ``sqrt``(temp);` `        ``// If temp is a perfect square``        ``if` `(X * X == temp) {``            ``break``;``        ``}` `        ``// Update temp``        ``temp = temp - 2;``        ``cntDecr += 1;``    ``}` `    ``// Store count of operations``    ``// by performing increments``    ``int` `cntIncr = 0;` `    ``// Increment the value of N``    ``while` `(``true``) {` `        ``// Stores sqrt of N``        ``int` `X = ``sqrt``(N);` `        ``// If N is a perfect square``        ``if` `(X * X == N) {``            ``break``;``        ``}` `        ``// Update temp``        ``N = N + 2;``        ``cntIncr += 1;``    ``}` `    ``// Return the minimum count``    ``return` `min(cntIncr, cntDecr);``}` `// Driver Code``int` `main()``{` `    ``int` `N = 15;``    ``cout << MinimumOperationReq(N);``    ``return` `0;``}`

## Java

 `// Java program to implement``// the above approach``class` `GFG{` `// Function to find the minimum number``// of operations required to make``// N a perfect square``static` `int` `MinimumOperationReq(``int` `N)``{``    ` `    ``// Stores count of operations``    ``// by performing decrements``    ``int` `cntDecr = ``0``;` `    ``// Stores value of N``    ``int` `temp = N;``    ` `    ``// Decrement the value of temp``    ``while` `(temp > ``0``)``    ``{``        ` `        ``// Stores square root of temp``        ``int` `X = (``int``)Math.sqrt(temp);` `        ``// If temp is a perfect square``        ``if` `(X * X == temp)``        ``{``            ``break``;``        ``}``        ` `        ``// Update temp``        ``temp = temp - ``2``;``        ``cntDecr += ``1``;``    ``}` `    ``// Store count of operations``    ``// by performing increments``    ``int` `cntIncr = ``0``;` `    ``// Increment the value of N``    ``while` `(``true``)``    ``{``        ` `        ``// Stores sqrt of N``        ``int` `X = (``int``)Math.sqrt(N);` `        ``// If N is a perfect square``        ``if` `(X * X == N)``        ``{``            ``break``;``        ``}` `        ``// Update temp``        ``N = N + ``2``;``        ``cntIncr += ``1``;``    ``}``    ` `    ``// Return the minimum count``    ``return` `Math.min(cntIncr, cntDecr);``}` `// Driver code``public` `static` `void` `main (String args[])``{``    ``int` `N = ``15``;``    ` `    ``System.out.print(MinimumOperationReq(N)); ``}``}` `// This code is contributed by ajaykr00kj`

## Python3

 `# Python3 program to implement``# the above approach` `# Function to find the minimum number``# of operations required to make``# N a perfect square``def` `MinimumOperationReq(N):``  ` `    ``# Stores count of operations``    ``# by performing decrements``    ``cntDecr ``=` `0``;` `    ``# Stores value of N``    ``temp ``=` `N;` `    ``# Decrement the value of``    ``# temp``    ``while` `(temp > ``0``):` `        ``# Stores square root of``        ``# temp``        ``X ``=` `int``(``pow``(temp, ``1` `/` `2``))``        ` `        ``# If temp is a perfect``        ``# square``        ``if` `(X ``*` `X ``=``=` `temp):``            ``break``;` `        ``# Update temp``        ``temp ``=` `temp ``-` `2``;``        ``cntDecr ``+``=` `1``;` `    ``# Store count of operations``    ``# by performing increments``    ``cntIncr ``=` `0``;` `    ``# Increment the value of N``    ``while` `(``True``):` `        ``# Stores sqrt of N``        ``X ``=` `int``(``pow``(N, ``1` `/` `2``))`  `        ``# If N is a perfect``        ``# square``        ``if` `(X ``*` `X ``=``=` `N):``            ``break``;` `        ``# Update temp``        ``N ``=` `N ``+` `2``;``        ``cntIncr ``+``=` `1``;` `    ``# Return the minimum``    ``# count``    ``return` `min``(cntIncr,``               ``cntDecr);` `# Driver code``if` `__name__ ``=``=` `'__main__'``:``  ` `    ``N ``=` `15``;``    ``print``(MinimumOperationReq(N));` `# This code is contributed by Rajput-Ji`

## C#

 `// C# program to implement``// the above approach``using` `System;``class` `GFG{` `// Function to find the minimum number``// of operations required to make``// N a perfect square``static` `int` `MinimumOperationReq(``int` `N)``{``  ``// Stores count of operations``  ``// by performing decrements``  ``int` `cntDecr = 0;` `  ``// Stores value of N``  ``int` `temp = N;` `  ``// Decrement the value of``  ``// temp``  ``while` `(temp > 0)``  ``{` `    ``// Stores square root of temp``    ``int` `X = (``int``)Math.Sqrt(temp);` `    ``// If temp is a perfect square``    ``if` `(X * X == temp)``    ``{``      ``break``;``    ``}` `    ``// Update temp``    ``temp = temp - 2;``    ``cntDecr += 1;``  ``}` `  ``// Store count of operations``  ``// by performing increments``  ``int` `cntIncr = 0;` `  ``// Increment the value of N``  ``while` `(``true``)``  ``{``    ``// Stores sqrt of N``    ``int` `X = (``int``)Math.Sqrt(N);` `    ``// If N is a perfect square``    ``if` `(X * X == N)``    ``{``      ``break``;``    ``}` `    ``// Update temp``    ``N = N + 2;``    ``cntIncr += 1;``  ``}` `  ``// Return the minimum count``  ``return` `Math.Min(cntIncr,``                  ``cntDecr);``}` `// Driver code``public` `static` `void` `Main(String []args)``{``  ``int` `N = 15;``  ``Console.Write(MinimumOperationReq(N)); ``}``}` `// This code is contributed by shikhasingrajput`

## Javascript

 ``

Output:

`3`

Time Complexity: O(N * log2(N))
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up