Skip to content
Related Articles

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

• Last Updated : 28 Apr, 2021

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 = 4
Output: 6
Explanation:
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 = 10
Output: 165984

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

If X ≤ Y: Reducing X minimizes the product.
If Y ≤ X: Reducing Y minimizes 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 ``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

 ``
Output:
`1`

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

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up