Given an integer **N**, the task is to find three positive integers **A**, **B**, and **C** such that the value of the expression **(3*A + 5*B + 7*C)** is equal to **N**. If no such triplet exists, then print **“-1”**.

**Examples:**

Input:N = 19Output:

A = 0

B = 1

C = 2Explanation:Setting A, B, and C equal to 0, 1, and 2 respectively, the evaluated value of the expression = 3 * A + 5 * B + 7 * C = 3 * 0 + 5 * 1 + 7 * 2 = 19, which is the same as N (= 19).

Input:N = 4Output:-1

**Naive Approach:** The simplest approach to solve the problem is to generate all possible triplets with integers up to **N** and check if there exists any triplet (A, B, C), such that the value of **(3*A + 5*B + 7*C)** is equal to **N**. If found to be true, then print that triplet. Otherwise, print **“-1”**. **Time Complexity:** O(N^{3})**Auxiliary Space:** O(1)

**Efficient Approach:** The above approach can be optimized based on the following observation that the value of **A **lies over the range **[0, N / 3]**, the value of **B** lies over the range **[0, N / 5]**, and the value of **C** lies over the range** [0, N / 7]**. Follow the steps below to solve the problem:

- Iterate over the range
**[0, N/7]**and perform the following operations:- Iterate over the range
**[0, N/5]**and find the value of**A**as**(N – 5*j – 7*i)**. - In the above step, if the value of
**A**is at least**0**and**A**is divisible by**3**, then there exists one such triplet as**(A/3, i, j)**. Print this triplet and break out of the loop.

- Iterate over the range
- After completing the above steps, if there doesn’t exist any such triplet then print
**“-1”**.

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 a triplet (A, B, C)` `// such that 3 * A + 5 * B + 7 * C is N` `void` `CalculateValues(` `int` `N){` ` ` `int` `A = 0, B = 0, C = 0;` ` ` `// Iterate over the range [0, N//7]` ` ` `for` `(C = 0; C < N/7; C++)` ` ` `{` ` ` `// Iterate over the range [0, N//5]` ` ` `for` `( B = 0; B < N/5; B++)` ` ` `{` ` ` `// Find the value of A` ` ` `int` `A = N - 7 * C - 5 * B;` ` ` `// If A is greater than or equal` ` ` `// to 0 and divisible by 3` ` ` `if` `(A >= 0 && A % 3 == 0)` ` ` `{` ` ` `cout << ` `"A = "` `<< A / 3 << ` `", B = "` `<< B << ` `", C = "` `<< C << endl;` ` ` `return` `;` ` ` `}` ` ` `}` ` ` `}` ` ` `// Otherwise, print -1` ` ` `cout << -1 << endl;` `}` `// Driver Code` `int` `main()` `{` ` ` `int` `N = 19;` ` ` `CalculateValues(19);` ` ` `return` `0;` `}` `// This code is contributed by susmitakundugoaldanga.` |

## Java

`// Java program to implement` `// the above approach` `import` `java.util.*;` `class` `GFG` `{` ` ` `// Function to find a triplet (A, B, C)` ` ` `// such that 3 * A + 5 * B + 7 * C is N` ` ` `static` `void` `CalculateValues(` `int` `N)` ` ` `{` ` ` `int` `A = ` `0` `, B = ` `0` `, C = ` `0` `;` ` ` `// Iterate over the range [0, N//7]` ` ` `for` `(C = ` `0` `; C < N/` `7` `; C++)` ` ` `{` ` ` `// Iterate over the range [0, N//5]` ` ` `for` `( B = ` `0` `; B < N/` `5` `; B++)` ` ` `{` ` ` `// Find the value of A` ` ` `A = N - ` `7` `* C - ` `5` `* B;` ` ` `// If A is greater than or equal` ` ` `// to 0 and divisible by 3` ` ` `if` `(A >= ` `0` `&& A % ` `3` `== ` `0` `)` ` ` `{` ` ` `System.out.print(` `"A = "` `+ A / ` `3` `+ ` `", B = "` `+ B + ` `", C = "` `+ C);` ` ` `return` `;` ` ` `}` ` ` `}` ` ` `}` ` ` `// Otherwise, print -1` ` ` `System.out.println(-` `1` `);` ` ` `}` ` ` `// Driver Code` ` ` `public` `static` `void` `main(String[] args)` ` ` `{` ` ` `int` `N = ` `19` `;` ` ` `CalculateValues(` `19` `);` ` ` `}` `}` `// This code is contributed by souravghosh0416.` |

## Python3

`# Python program for the above approach` `# Function to find a triplet (A, B, C)` `# such that 3 * A + 5 * B + 7 * C is N` `def` `CalculateValues(N):` ` ` ` ` `# Iterate over the range [0, N//7]` ` ` `for` `C ` `in` `range` `(` `0` `, N` `/` `/` `7` `+` `1` `):` ` ` ` ` `# Iterate over the range [0, N//5]` ` ` `for` `B ` `in` `range` `(` `0` `, N` `/` `/` `5` `+` `1` `):` ` ` `# Find the value of A` ` ` `A ` `=` `N ` `-` `7` `*` `C ` `-` `5` `*` `B` ` ` `# If A is greater than or equal` ` ` `# to 0 and divisible by 3` ` ` `if` `(A >` `=` `0` `and` `A ` `%` `3` `=` `=` `0` `):` ` ` `print` `(` `"A ="` `, A ` `/` `3` `, ` `", B ="` `, B, ", \` ` ` `C ` `=` `", C, sep ="` `")` ` ` `return` ` ` ` ` `# Otherwise, print -1` ` ` `print` `(` `-` `1` `)` ` ` `return` `# Driver Code` `if` `__name__ ` `=` `=` `'__main__'` `:` ` ` ` ` `N ` `=` `19` ` ` `CalculateValues(` `19` `)` |

## C#

`// C# program for the above approach` `using` `System;` `class` `GFG{` ` ` `// Function to find a triplet (A, B, C)` ` ` `// such that 3 * A + 5 * B + 7 * C is N` ` ` `static` `void` `CalculateValues(` `int` `N)` ` ` `{` ` ` `int` `A = 0, B = 0, C = 0;` ` ` `// Iterate over the range [0, N//7]` ` ` `for` `(C = 0; C < N/7; C++)` ` ` `{` ` ` `// Iterate over the range [0, N//5]` ` ` `for` `( B = 0; B < N/5; B++)` ` ` `{` ` ` `// Find the value of A` ` ` `A = N - 7 * C - 5 * B;` ` ` `// If A is greater than or equal` ` ` `// to 0 and divisible by 3` ` ` `if` `(A >= 0 && A % 3 == 0)` ` ` `{` ` ` `Console.Write(` `"A = "` `+ A / 3 + ` `", B = "` `+ B + ` `", C = "` `+ C);` ` ` `return` `;` ` ` `}` ` ` `}` ` ` `}` ` ` `// Otherwise, print -1` ` ` `Console.WriteLine(-1);` ` ` `}` ` ` `// Driver Code` ` ` `static` `public` `void` `Main()` ` ` `{` ` ` `int` `N = 19;` ` ` `CalculateValues(19);` ` ` `}` `}` `// This code is contributed by splevel62.` |

**Output:**

A = 3.0 , B = 2 , C = 0

**Time Complexity:** O(N^{2})**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****.**