# Minimize value of |A – X| + |B – Y| + |C – Z| such that X * Y = Z

Given three integers **A**, **B**, and **C**, the task is to find the minimum possible value of **|A – X| + |B – Y| + |C – Z|** such that **X * Y = Z**.

**Example**:

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. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**

In case you wish to attend **live classes **with experts, please refer **DSA Live Classes for Working Professionals **and **Competitive Programming Live for Students**.

Input:A = 19, B = 28, C = 522Output:2Explanation:The most optimal choice of X, Y, and Z for the given A, B, and C are X = 18, Y = 29, and Z = 522. The equation X * Y = Z holds true and the value of |A – X| + |B – Y| + |C – Z| = 2 which is minimum possible.

Input:A = 11, B = 11, C = 121Output:0Explanation:The given values of A, B, and C satisfies A * B = C. Therefore the most optimal choice is X = A, Y = B, and Z = C.

**Approach:** The above problem can be solved using the following observations:

- The maximum value of
**|A – X| + |B – Y| + |C – Z|**can be**A + B + C**for**X**,**Y**, and**Z**equal to**0**. - Based on the above observation, iterating over all the values of
**i * j**such that**i * j <= 2 * C**and choosing the best value is the optimal choice.

Therefore, iterate over all values of **i** in the range **[1, 2*C]**, and for every **i**, iterate over all values of **j** such that i** * j <= 2 * C** and keep track of the minimum possible value of **|A – i| + |B – j| + |C – i * j|**.

Below is the implementation of the above approach:

## C++

`// C++ program for the above approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Function to find the minimum possible` `// value of |A - X| + |B - Y| + |C - Z|` `// such that X * Y = Z for given A, B and C` `int` `minimizeCost(` `int` `A, ` `int` `B, ` `int` `C)` `{` ` ` `// Stores the minimum value of` ` ` `// |A - X| + |B - Y| + |C - Z|` ` ` `// such that X * Y = Z` ` ` `int` `ans = A + B + C;` ` ` `// Iterate over all values of i` ` ` `// in the range [1, 2*C]` ` ` `for` `(` `int` `i = 1; i <= 2 * C; i++) {` ` ` `int` `j = 0;` ` ` `// Iterate over all values of` ` ` `// j such that i*j <= 2*c` ` ` `while` `(i * j <= 2 * C) {` ` ` `// Update the value of ans` ` ` `ans = min(ans, ` `abs` `(A - i) + ` `abs` `(B - j)` ` ` `+ ` `abs` `(i * j - C));` ` ` `j++;` ` ` `}` ` ` `}` ` ` `// Return answer` ` ` `return` `ans;` `}` `// Driver Code` `int` `main()` `{` ` ` `int` `A = 19, B = 28, C = 522;` ` ` `cout << minimizeCost(A, B, C);` ` ` `return` `0;` `}` |

## Java

`// Java program for the above approach` `class` `GFG{` `// Function to find the minimum possible` `// value of |A - X| + |B - Y| + |C - Z|` `// such that X * Y = Z for given A, B and C` `public` `static` `int` `minimizeCost(` `int` `A, ` `int` `B, ` `int` `C)` `{` ` ` `// Stores the minimum value of` ` ` `// |A - X| + |B - Y| + |C - Z|` ` ` `// such that X * Y = Z` ` ` `int` `ans = A + B + C;` ` ` `// Iterate over all values of i` ` ` `// in the range [1, 2*C]` ` ` `for` `(` `int` `i = ` `1` `; i <= ` `2` `* C; i++) {` ` ` `int` `j = ` `0` `;` ` ` `// Iterate over all values of` ` ` `// j such that i*j <= 2*c` ` ` `while` `(i * j <= ` `2` `* C) {` ` ` `// Update the value of ans` ` ` `ans = Math.min(ans, Math.abs(A - i) + Math.abs(B - j)` ` ` `+ Math.abs(i * j - C));` ` ` `j++;` ` ` `}` ` ` `}` ` ` `// Return answer` ` ` `return` `ans;` `}` `// Driver Code` `public` `static` `void` `main(String args[])` `{` ` ` `int` `A = ` `19` `, B = ` `28` `, C = ` `522` `;` ` ` `System.out.print(minimizeCost(A, B, C));` `}` `}` `// This code is contributed by gfgking.` |

## Python3

`# Python Program to implement` `# the above approach` `# Function to find the minimum possible` `# value of |A - X| + |B - Y| + |C - Z|` `# such that X * Y = Z for given A, B and C` `def` `minimizeCost(A, B, C):` ` ` `# Stores the minimum value of` ` ` `# |A - X| + |B - Y| + |C - Z|` ` ` `# such that X * Y = Z` ` ` `ans ` `=` `A ` `+` `B ` `+` `C` ` ` `# Iterate over all values of i` ` ` `# in the range [1, 2*C]` ` ` `for` `i ` `in` `range` `(` `1` `, ` `2` `*` `C ` `+` `1` `):` ` ` `j ` `=` `0` ` ` `# Iterate over all values of` ` ` `# j such that i*j <= 2*c` ` ` `while` `(i ` `*` `j <` `=` `2` `*` `C):` ` ` `# Update the value of ans` ` ` `ans ` `=` `min` `(ans, ` `abs` `(A ` `-` `i) ` `+` `abs` `(B ` `-` `j) ` `+` `abs` `(i ` `*` `j ` `-` `C))` ` ` `j ` `+` `=` `1` ` ` ` ` `# Return answer` ` ` `return` `ans` `# Driver Code` `A ` `=` `19` `B ` `=` `28` `C ` `=` `522` `print` `(minimizeCost(A, B, C))` `# This code is contributed by Saurabh Jaiswal` |

## C#

`// C# program for the above approach` `using` `System;` `class` `GFG{` `// Function to find the minimum possible` `// value of |A - X| + |B - Y| + |C - Z|` `// such that X * Y = Z for given A, B and C` `public` `static` `int` `minimizeCost(` `int` `A, ` `int` `B, ` `int` `C)` `{` ` ` ` ` `// Stores the minimum value of` ` ` `// |A - X| + |B - Y| + |C - Z|` ` ` `// such that X * Y = Z` ` ` `int` `ans = A + B + C;` ` ` `// Iterate over all values of i` ` ` `// in the range [1, 2*C]` ` ` `for` `(` `int` `i = 1; i <= 2 * C; i++) {` ` ` `int` `j = 0;` ` ` `// Iterate over all values of` ` ` `// j such that i*j <= 2*c` ` ` `while` `(i * j <= 2 * C) {` ` ` `// Update the value of ans` ` ` `ans = Math.Min(ans, Math.Abs(A - i) + Math.Abs(B - j)` ` ` `+ Math.Abs(i * j - C));` ` ` `j++;` ` ` `}` ` ` `}` ` ` `// Return answer` ` ` `return` `ans;` `}` `// Driver Code` `public` `static` `void` `Main(String []args)` `{` ` ` `int` `A = 19, B = 28, C = 522;` ` ` `Console.Write(minimizeCost(A, B, C));` `}` `}` `// This code is contributed by shivanisinghss2110` |

## Javascript

`<script>` ` ` `// JavaScript Program to implement` ` ` `// the above approach` ` ` `// Function to find the minimum possible` ` ` `// value of |A - X| + |B - Y| + |C - Z|` ` ` `// such that X * Y = Z for given A, B and C` ` ` `function` `minimizeCost(A, B, C)` ` ` `{` ` ` ` ` `// Stores the minimum value of` ` ` `// |A - X| + |B - Y| + |C - Z|` ` ` `// such that X * Y = Z` ` ` `let ans = A + B + C;` ` ` `// Iterate over all values of i` ` ` `// in the range [1, 2*C]` ` ` `for` `(let i = 1; i <= 2 * C; i++) {` ` ` `let j = 0;` ` ` `// Iterate over all values of` ` ` `// j such that i*j <= 2*c` ` ` `while` `(i * j <= 2 * C) {` ` ` `// Update the value of ans` ` ` `ans = Math.min(ans, Math.abs(A - i) + Math.abs(B - j)` ` ` `+ Math.abs(i * j - C));` ` ` `j++;` ` ` `}` ` ` `}` ` ` `// Return answer` ` ` `return` `ans;` ` ` `}` ` ` `// Driver Code` ` ` `let A = 19, B = 28, C = 522;` ` ` `document.write(minimizeCost(A, B, C));` ` ` `// This code is contributed by Potta Lokesh` ` ` `</script>` |

**Output:**

2

**Time Complexity:** O(C*log C)**Auxiliary Space:** O(1)