# Minimize positive product of two given numbers by at most N decrements

Given three integers **X**, **Y**, and **N**, the task is to find the minimum possible positive product of **X** and **Y** that can be obtained by decreasing either the value of **X** or **Y** by **1** at most** N** times.

**Examples:**

Input:X = 5, Y= 6, N = 4Output:6Explanation:

Decrease the value of X by 4, X = 5 – 4 = 1 and Y = 6.

Therefore, the minimized product = X * Y = 1 * 6 = 6

Input:X = 49, Y = 4256, N = 10Output:165984

**Approach:** The given problem can be solved based on the following observations:

If X â‰¤ Y:ReducingXminimizes the product.If Y â‰¤ X:ReducingYminimizes the product.

Mathematical Proof:

If (X – 2) * Y < (X – 1) * (Y – 1)

=> X * Y – 2 * Y < X * Y – X – Y + 1

=> – 2 Ã— Y < -X – Y + 1

=> Y > X – 1

Follow the steps below to solve the problem:

**If X â‰¤ Y:**Follow the steps below:**If N < X:**Print**Y * (X – N)**as the answer as reducing**X**minimizes the product.- Otherwise, reduce
**X**to 1 and reduce the remaining**N**from**Y**to minimize the product. Therefore, print**Y – max(1, N – X + 1))**as the required minimized product.

- Otherwise, if
**N < Y**, print**X * (Y – N)**as the minimized product. If**N â‰¥ Y**, reduce**Y**to**1**and print**max(X – (N – Y + 1), 1)**as the minimized product.

Below is the implementation of the above approach:

## C++

`// C++ program to implement` `// the above approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Function to minimize` `// the product of two numbers` `int` `minProd(` `int` `X, ` `int` `Y,` ` ` `int` `N)` `{` ` ` `if` `(X <= Y) {` ` ` `if` `(N < X)` ` ` `// Reducing X, N times,` ` ` `// minimizes the product` ` ` `return` `(X - N) * Y;` ` ` `else` `{` ` ` `// Reduce X to 1 and reduce` ` ` `// remaining N from Y` ` ` `return` `max(Y - (N - X + 1), 1);` ` ` `}` ` ` `}` ` ` `if` `(Y >= N)` ` ` `// Reducing Y, N times,` ` ` `// minimizes the product` ` ` `return` `(Y - N) * X;` ` ` `// Reduce Y to 1 and reduce` ` ` `// remaining N from X` ` ` `return` `max(X - (N - Y + 1), 1);` ` ` `;` `}` `// Driver Code` `int` `main()` `{` ` ` `int` `X = 47, Y = 42, N = 167;` ` ` `cout << minProd(X, Y, N);` `}` |

## Java

`// Java program to implement` `// the above approach` `import` `java.io.*;` `class` `GFG{` `// Function to minimize` `// the product of two numbers` `static` `int` `minProd(` `int` `X, ` `int` `Y,` ` ` `int` `N)` `{` ` ` `if` `(X <= Y)` ` ` `{` ` ` `if` `(N < X)` ` ` ` ` `// Reducing X, N times,` ` ` `// minimizes the product` ` ` `return` `(X - N) * Y;` ` ` `else` ` ` `{` ` ` ` ` `// Reduce X to 1 and reduce` ` ` `// remaining N from Y` ` ` `return` `Math.max(Y - (N - X + ` `1` `), ` `1` `);` ` ` `}` ` ` `}` ` ` ` ` `if` `(Y >= N)` ` ` ` ` `// Reducing Y, N times,` ` ` `// minimizes the product` ` ` `return` `(Y - N) * X;` ` ` ` ` `// Reduce Y to 1 and reduce` ` ` `// remaining N from X` ` ` `return` `Math.max(X - (N - Y + ` `1` `), ` `1` `);` `}` ` ` `// Driver Code` `public` `static` `void` `main (String[] args)` `{` ` ` `int` `X = ` `47` `, Y = ` `42` `, N = ` `167` `;` ` ` ` ` `System.out.println(minProd(X, Y, N));` `}` `}` `// This code is contributed by code_hunt` |

## Python3

`# Python3 program to implement` `# the above approach` `# Function to minimize` `# the product of two numbers` `def` `minProd(X, Y, N):` ` ` `if` `(X <` `=` `Y):` ` ` `if` `(N < X):` ` ` `# Reducing X, N times,` ` ` `# minimizes the product` ` ` `return` `(X ` `-` `N) ` `*` `Y` ` ` `else` `:` ` ` `# Reduce X to 1 and reduce` ` ` `# remaining N from Y` ` ` `return` `max` `(Y ` `-` `(N ` `-` `X ` `+` `1` `), ` `1` `)` ` ` `if` `(Y >` `=` `N):` ` ` `# Reducing Y, N times,` ` ` `# minimizes the product` ` ` `return` `(Y ` `-` `N) ` `*` `X` ` ` `# Reduce Y to 1 and reduce` ` ` `# remaining N from X` ` ` `return` `max` `(X ` `-` `(N ` `-` `Y ` `+` `1` `), ` `1` `)` `# Driver Code` `if` `__name__ ` `=` `=` `"__main__"` `:` ` ` `X ` `=` `47` ` ` `Y ` `=` `42` ` ` `N ` `=` `167` ` ` `print` `(minProd(X, Y, N))` `# This code is contributed by Chitranayal` |

## C#

`// C# program to implement` `// the above approach` `using` `System;` `class` `GFG{` `// Function to minimize` `// the product of two numbers` `static` `int` `minProd(` `int` `X,` ` ` `int` `Y, ` `int` `N)` `{` ` ` `if` `(X <= Y)` ` ` `{` ` ` `if` `(N < X)` ` ` `// Reducing X, N times,` ` ` `// minimizes the product` ` ` `return` `(X - N) * Y;` ` ` `else` ` ` `{` ` ` `// Reduce X to 1 and reduce` ` ` `// remaining N from Y` ` ` `return` `Math.Max(Y - (N -` ` ` `X + 1), 1);` ` ` `}` ` ` `}` ` ` `if` `(Y >= N)` ` ` `// Reducing Y, N times,` ` ` `// minimizes the product` ` ` `return` `(Y - N) * X;` ` ` `// Reduce Y to 1 and reduce` ` ` `// remaining N from X` ` ` `return` `Math.Max(X - (N -` ` ` `Y + 1), 1);` `}` ` ` `// Driver Code` `public` `static` `void` `Main(String[] args)` `{` ` ` `int` `X = 47, Y = 42, N = 167;` ` ` `Console.WriteLine(minProd(X, Y, N));` `}` `}` `// This code is contributed by Rajput-Ji` |

## Javascript

`<script>` `// Javascript program to implement` `// the above approach` `// Function to minimize` `// the product of two numbers` `function` `minProd(X, Y, N)` `{` ` ` `if` `(X <= Y)` ` ` `{` ` ` `if` `(N < X)` ` ` ` ` `// Reducing X, N times,` ` ` `// minimizes the product` ` ` `return` `(X - N) * Y;` ` ` `else` ` ` `{` ` ` ` ` `// Reduce X to 1 and reduce` ` ` `// remaining N from Y` ` ` `return` `Math.max(Y - (N - X + 1), 1);` ` ` `}` ` ` `}` ` ` ` ` `if` `(Y >= N)` ` ` ` ` `// Reducing Y, N times,` ` ` `// minimizes the product` ` ` `return` `(Y - N) * X;` ` ` ` ` `// Reduce Y to 1 and reduce` ` ` `// remaining N from X` ` ` `return` `Math.max(X - (N - Y + 1), 1);` `}` `// Driver Code` `let X = 47, Y = 42, N = 167;` ` ` `document.write(minProd(X, Y, N));` `// This code is contributed by target_2` `</script>` |

**Output:**

1

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